使用头文件和实现文件的C ++类

时间:2010-01-20 19:56:14

标签: c++

我已经整理了一个简单的C ++“Hello World”程序来练习;不幸的是,在编译时我遇到了一些错误:

  

预期')'在fName之前

     

错误:'HelloWorld :: HelloWorld(std :: string,std :: string)'的原型与类'HelloWorld'中的任何一个都不匹配

以下是我的代码,任何人都可以帮助我理解我缺少/忽视的内容吗?谢谢。

标题

  1 #ifndef HELLOWORLD_H_ 
  2 #define HELLOWORLD_H_
  3 #include <string>
  4 
  5 class HelloWorld
  6 {
  7     public:
  8         HelloWorld();
  9         HelloWorld(string fName, string lName);
 10         ~HelloWorld();
 11 };
 12 
 13 #endif

实施

  1 #include <iostream>
  2 #include <string>
  3 #include "HelloWorld.h"
  4 
  5 using namespace std;
  6 
  7 HelloWorld::HelloWorld()
  8 {
  9     cout << "Hello, anonymous!";
 10 }
 11 
 12 HelloWorld::HelloWorld(string fName, string lName)
 13 {
 14     cout << "Hello, " << fName << ' ' << lName << endl;
 15 }
 16 
 17 HelloWorld::~HelloWorld()
 18 {
 19     cout << "Goodbye..." << endl;
 20 }

2 个答案:

答案 0 :(得分:10)

您需要将头文件更改为引用std::string而不是string,因为它们是在std命名空间内定义的。

HelloWorld(std::string fName, std::string lName);

它适用于您的.cpp文件,因为您专门导入了此命名空间。但是,解决方案不是在头文件中导入此命名空间(通常在C ++中是一个坏主意)。

答案 1 :(得分:3)

如果代码与您粘贴到问题中的代码完全相同,则错误的最可能原因是在标题中,编译器未识别string的含义,因为它不是全局命名空间尝试完全符合条件:

class HelloWorld
{
//...
   HelloWorld( std::string fName, std::string lName );
};