C++;使用头文件和实现文件初始化 我已经把一个简单的C++“Hello World”程序结合起来练习了;不幸的是,在编译时,我遇到了一些错误:
fName之前应为“') 错误:“HelloWorld::HelloWorld(std::string,std::string)”的原型与类“HelloWorld”中的任何原型都不匹配 下面是我的代码,有人能帮我理解我遗漏了什么/忽略了什么吗?谢谢 标题:C++;使用头文件和实现文件初始化 我已经把一个简单的C++“Hello World”程序结合起来练习了;不幸的是,在编译时,我遇到了一些错误:,c++,C++,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
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 }
1\ifndef HELLOWORLD\u
2#定义HELLOWORLD#_
3#包括
4.
5级HelloWorld
6 {
7公众:
8 HelloWorld();
9 HelloWorld(字符串fName,字符串lName);
10~ HelloWorld();
11 };
12
13#endif
实施:
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 }
1#包括
2#包括
3#包括“HelloWorld.h”
4.
5使用名称空间标准;
6.
7 HelloWorld::HelloWorld()
8 {
9 cout您需要将头文件更改为引用std::string
,而不是string
,因为它们是在std名称空间中定义的
HelloWorld(std::string fName, std::string lName);
它可以在.cpp文件中工作,因为您专门导入了这个名称空间。但是,解决方案不是在头文件中导入这个名称空间(一般来说,在C++中这是个坏主意).如果代码与您粘贴到问题中的代码完全相同,则最可能的错误原因是在标题中,编译器没有识别字符串的含义,因为它不是全局命名空间中的符号。请尝试完全限定它:
class HelloWorld
{
//...
HelloWorld( std::string fName, std::string lName );
};
如果必须的话,您可以导入单个名称,比如使用std::string
。我仍然不太愿意,但这并没有破坏使用名称空间的全部目的。是否有任何情况下建议将名称空间导入头文件?即使使用std::string
也不是一个好主意使用std::string总是更好在标题文件中的声明中,请不要在此处发布的代码中使用行号,特别是如果您在问题中没有提及行号,则更不要使用行号。行号会使您很难将代码复制并粘贴到文件中进行编译。