C ++でクラスのインスタンスを作成する方法

私はC ++の初心者です。私はクラスを持っていて、コンパイルしようとすると「メイン」が欠けていると言います。

このクラスのインスタンスを作成し、そのメソッドにアクセスするには、私は何をする必要がありますか?

#include 
#include 

using namespace std;

class Account
{
      string name;
      double balance;

  public:
      Account(string n);
      Account(string n, double initial_balance);

      string get_name() const;
      double get_balance() const;

      void deposit(double amount);

      void widthdraw(double amount);

};

編集:

主な方法はどこに入れますか?

私は次のような別のファイルに入れてみました

    #include 
    int main(){
    Account:: Account(string n) : name(n), balance(0){}
    return 0 ;
    }

これはディレクトリにアカウントがないというエラーを出します。私はこれがコンパイルされていないためです

編集:

両方のファイルが同じディレクトリにあります

account_main.cc

    #include
    #include 
    #include "Account.cc"

    Account:: Account(string n) : name(n), balance(0){} 
    int main()
    {
        Account account("Account Name");//A variable called "account"
        account.deposit(100.00);//Calls the deposit() function on account

        return 0 ;
    }

Account.cc

#include
#include 

using namespace std;

class Account
{
      string name;
      double balance;

  public:
      Account(string n);
      Account(string n, double initial_balance);

      string get_name() const;
      double get_balance() const;

      void deposit(double amount);

      void widthdraw(double amount);

};
0
メインの定義でクラスコンストラクタを定義していますか?本当にそれが宿題であっても、良いC ++の本を手に入れて、基本的な基本について作業してください。
追加された 著者 Christian Rau,
これが宿題の場合、読んでいる本はありませんか?私はそれが何かこの基本的なものをカバーしなければならないことは確かです。
追加された 著者 ildjarn,
main でC ++。
追加された 著者 wkl,
あなたは何から学んでいますか?私はあなたがここに記載された1つ以上の本が必要だと思う: stackoverflow.com/q/388242/10077
追加された 著者 Fred Larson,

3 答え

すべてのC ++プログラムには、エントリポイントというものが必要です。 main()関数は、常に標準C ++プログラムのエントリポイントです。 main()を提供する必要があります。それ以外の場合は、リンカーが不平を言います。 main()関数は、次の2つの方法のいずれかで記述できます。

int main()
{
    return 0;
}

または、コマンドライン引数が必要な場合は次のようにします。

int main(int argc, char ** argv)
{
    return 0;
}

void main()C ++では無効ですことに注意してください。また、 main()関数では return ステートメントは厳密には必要ではありませんが、一貫性のために明示的に記述する必要があります。

C ++標準3.6.1メイン関数[basic.start.main]

     

5。 mainのreturn文は、main関数を残す(自動的な格納期間を持つオブジェクトをすべて破棄する)という効果を持ちます。   戻り値を引数としてexitを呼び出します。コントロールが到達すると   return文に遭遇することなくmainの終わりに、効果は   

  return 0;
 

あなたの最新の編集に関する質問に答えるには:

#include 

int main(){ 
    Account:: Account(string n) : name(n), balance(0){} 
    return 0 ; 
} 

main()の形式は正しいですが、これはクラスメンバー定義の仕方ではありません。コンストラクタはmain関数の外側にある必要があります。

#include 

// Outside of main()
Account::Account(string n) : name(n), balance(0)
{
} 

int main()
{ 
     return 0 ; 
} 

Account のインスタンスを作成するには、変数を宣言し、必要なすべてのコンストラクタ引数を次のように渡します。

int main()
{
    Account account("Account Name");//A variable called "account"
    account.deposit(100.00);//Calls the deposit() function on account
                            //Make sure you provide a function
                            //definition for Account::deposit().
    return 0;
}

Also, check the exact file path of where class Account is. If the Account class is in a file called Account.h and is in the same folder as the file containing the main() function, then you need to use #include "Account.h" instead of #include in that file. For example:

#include "Account.h"//Note .h and quotes

Account::Account(string n) : name(n), balance(0)
{
} 

int main()
{
   //...
    return 0;
}

これは、実際にはC ++プログラミング言語のかなり基本的な側面です。確かにあなたはこれをカバーする本を持っていますか?実際、 main()関数と #include 文は通常、C ++でプログラミングするときに最初に学ぶものです。 良いC ++の本を拾い読みして読むことを強くお勧めしますそれらを練習してください。

6
追加された
それに感謝します。私はオリジナルのポストに追加して見てください。
追加された 著者 code511788465541441,
main_account.ccにmainメソッドがありますが、account.ccと同じフォルダにあります。私がmain_account.ccをコンパイルしようとすると、ディレクトリにアカウントが見つかりません。私は#include と#include を試しましたが、うまくいきません。また、そのディレクトリにAccountの実行可能ファイルがありません。アカウントをコンパイルしようとすると、メインの方法はないので、私はそれを作ることができません
追加された 著者 code511788465541441,
私は元のメッセージに両方のファイルの内容を追加しました。可能であれば、見て、固定バージョンを投稿してください。ありがとう
追加された 著者 code511788465541441,
大丈夫でした。main_account.ccをコンパイルすると "main_account.cc:(.text+0x92):` Account :: deposit(double) 'への参照が未定義です。 "
追加された 著者 code511788465541441,
それは非常に感謝していただきありがとうございます
追加された 著者 code511788465541441,
@ user521180: Account.cc の名前を Account.h に変更し、 Account_main.cc #include "Account.h"/code>
追加された 著者 In silico,
@ user521180:クラスアカウントはどのファイルですか? Account.h と呼ばれていますか?インクルード文でもファイル拡張子を指定する必要があるためです。また、ファイルをコンパイルするときには、 Account ではなくヘッダファイル、 main_account.cc ではなくソースファイルにファイルパスを渡します。
追加された 著者 In silico,
@タイラーフェラーロ:はい。私の最新の編集を見てください。
追加された 著者 In silico,
それは有効ですか?それは何も戻っていない...
追加された 著者 Genzume,

For your latest edit: not Account in the directory

これを試して:

#include "Account.h"  //quotes, and .h


Account:: Account(string n)  //this must be outside of main, it's its own function
: name(n), balance(0) //I put these on three seperate lines but
{}                    //that's a personal choice

int main(){  //this is what the code should do when it starts
    Account person1("George"); //create a Account called person1 with the name George
    cout << person1.get_name(); //c-output person1's name.
    return 0 ; //return success (success=0)
}
1
追加された
#include "Account.cc"が機能しました。 mainメソッドのクラスはコンパイルされていますが、Account.ccはまだコンパイルされていません。
追加された 著者 code511788465541441,
あなたのコンパイラが何であれ使用するよう教えるために(人で)誰かを見つけてください。あなたが欠けている多くのステップとコンセプトがあります。
追加された 著者 Mooing Duck,
ファイルを#include すると、基本的には現在のファイルにコピー・ペーストされるので、そのファイルの内容は実際にコンパイルされます。なぜあなたはそれがコンパイルされていないと言うのですか?
追加された 著者 Mooing Duck,
#include は、インクルード・ディレクティブの位置に、名前付きファイルの内容を基本的に貼り付けます。したがって、 #include "Account.cc" では、Account.ccの内容はmain_account.ccの一部としてコンパイルされます。一般に、このような.ccファイルを含めることは悪い習慣と考えられます。代わりに、 '.h'ヘッダーファイルを使用して、ヘッダーに何が入るのか、.ccファイルに入るのかを判断する方法を理解する必要があります。あなたの場合は、 #includenamespace std; を使い、 std :: Account.ccの名前をAccount.hに変更します。
追加された 著者 bames53,

指摘されているように、あなたはまともな本が必要です。あなたの質問に答えるには、次のことを知っておくべきです: クラスは通常.hファイルで定義され、.cppまたは.ccファイルで実装されます。 Account.h、Account.cc、main.ccの3つのファイルが必要です。 .ccファイルのみをコンパイルし、.hファイルはクラスに関する情報を必要とする部分(つまり、実際にクラスで何かをしているとき)に含まれています。 g ++(linux、unix、mingwだと思います)を使用している場合、次のコマンドを使用してプログラムをコンパイルできます:g ++ main.cc Account.cc -o program_name

main.cc:

#include 
using namespace std;

#include "Account.h"
int main() {
  Account a("first account");

  cout << a.get_balance() << endl;
  a.deposit(100.0);
  cout << a.get_balance() << endl;

  return 0;
}

Account.hファイルは次のようになります。

#include
//#include  -- not needed here

// using namespace std; -- don't use 'using' in header files

class Account
{
  std::string name;
  double balance;

public:
    Account(std::string n);
    Account(std::string n, double initial_balance);

    std::string get_name() const;
    double get_balance() const;

    void deposit(double amount);

    void widthdraw(double amount);

};

最後に、Account.ccファイルでクラスを実装する必要があります。

#include "Account.h"

using namespace std;

Account::Account(string n) : name(n), balance(0.0) {}

Account::Account(string n, double initial_balance) :
name(n), balance(initial_balance) {}

string Account::get_name() const {
  return name;
}

double Account::get_balance() const {
  return balance;
}

void Account::deposit(double amount) {
  balance += amount;
}

void Account::widthdraw(double amount) {
  balance -= amount;//generously allow overdraft...
}

希望が役立ちます。

ローマ

1
追加された