0

私はこれを本からコピーしました。main.cppただし、ソースファイルに何を追加して実行するかはわかりません。

.hクラス宣言はファイルに入れられ、実装はファイルに入れられることを知ってい.cppます。何を書く必要がありmain.cppますか?

いろいろ試してみましたが、エラーメッセージがたくさん出ます。

 // cat.h
#ifndef ____2_cat_implementation__Cat__
#define ____2_cat_implementation__Cat__

#include <iostream>
using namespace std;
class Cat
{
public:
Cat (int initialAge);
~Cat();
int GetAge() { return itsAge;}              
void SetAge (int age) { itsAge = age;}      
void Meow() { cout << "Meow.\n";}          
private: int itsAge;
};

#endif /* defined(____2_cat_implementation__Cat__) */

...

// cat.cpp
#include <iostream>
#include "Cat.h"
using namespace std;

Cat::Cat(int initialAge) 
{
itsAge = initialAge;
}

Cat::~Cat() 
{

}

int main()
{
    Cat Frisky(5);
    Frisky.Meow();
    cout << "Frisky is a cat who is ";
    cout << Frisky.GetAge() << " years old.\n";
    Frisky.Meow();
    Frisky.SetAge(7);
    cout << "Now Frisky is " ;
    cout << Frisky.GetAge() << " years old.\n";
    return 0;
}
4

2 に答える 2

0

あなたは行方不明}で不必要です;

  //----------------------v
  Cat::Cat(int initialAge); 
  {
      itsAge = initialAge;
  }
//^

main.cppに何を書く必要がありますか

通常、ご指摘のとおり、.hファイルには宣言と.cppファイル(定義)が含まれています。次に、main.cppファイルに関数が含まれている必要があります(関数mainを含むファイルに名前を付ける必要はありません。何でもかまいません。mainmain.cpp

したがって、この例ではmain.cpp、次の内容のファイルを作成できます。

// include the declarations file
#include "cat.h"

// include the header for cin/cout/etc
#include <iostream>

using namespace std;

int main()
{
    Cat Frisky(5);
    Frisky.Meow();
    cout << "Frisky is a cat who is ";
    cout << Frisky.GetAge() << " years old.\n";
    Frisky.Meow();
    Frisky.SetAge(7);
    cout << "Now Frisky is " ;
    cout << Frisky.GetAge() << " years old.\n";
    return 0;
}

その他の注意事項:

  • using namespace std;特にヘッダーファイルでは、これは悪い習慣です。代わりに使用してくださいstd::(たとえばstd::cout、、、std::cinなどstd::string
  • .hファイルと同じよう.cppに、実装の半分をヘッダーに入れず、残りをソースファイルに入れないでください。すべての定義をソースファイル内に配置します(inlineヘッダーに実装されている関数が必要な場合を除く)
  • __またはで始まる名前の使用は避けてください_。これらは標準で予約されています。
于 2013-02-08T09:09:25.987 に答える
0

この部分をもう一度見てください。

Cat::Cat(int initialAge); 
{
itsAge = initialAge;

Cat::~Cat() 

}コンストラクターの終了と;、関数ヘッダーの後の余分なものがありません。

無関係な注意として、アンダースコアで始まるグローバル名 ( など____2_cat_implementation__Cat__) は使用しないでください。これらの名前は仕様で予約されています。

于 2013-02-08T09:08:49.217 に答える