我已经整理了一个简单的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 }
答案 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 );
};