繁体   English   中英

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

[英]C++ Class using header and implemenation files

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM