2013-02-08 43 views
0

我已经从书中复制出来了。我只是不确定要在main.cpp源文件中添加什么才能使其运行。C++中的单独文件中的类?

我知道类声明进入.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; 
} 
+0

你如何编译?什么是你得到的第一对夫妇的错误消息? (很多潜在的问题 - 例如在区分大小写的文件系统上,Cat。h将找不到名为cat.h的文件,在Cat :: Cat(int)定义的末尾缺少“}”。) –

+0

您收到的错误消息是什么? – Subhajit

回答

0

看这部分再次:

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

Cat::~Cat() 

你错过收盘}的构造,以及功能后,一个额外的;头。

在不相关的说明中,请不要使用以下划线开头的全局名称(如____2_cat_implementation__Cat__),这些名称由规范保留。

0

您有失踪}和不必要的;

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

什么会我需要在main.cpp中写

Usially,正如你所指出的那样,.h文件包含声明和.cpp文件 - 定义。然后,main.cpp文件应包含main功能(它没有必要来命名文件,其中包含main功能main.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::coutstd::cinstd::string等)
  • 你有.h.cpp文件,不要把一半的落实页眉和休息 - 源文件英寸把所有的定义放在源文件中(除非你想inline的功能,在头文件中实现)
  • 避免使用名称,从___开始 - 它们是由标准保留的。