我正在尝试学习如何将.h文件与我的.cpp文件一起使用,并且每当我运行我的代码时,我几乎每个变量都会出现错误。
这是我的.h文件:
class Person
{
public:
Person(
string firstNames,
string lastNames,
string socialSecurityNumber,
string gender)
: firstNames(firstNames),
lastNames(lastNames),
socialSecurityNumber(socialSecurityNumber)
{}
string getFirstNames() const;
void setFirstNames(string aFirstNames);
string getLastNames() const;
void setLastNames(string aLastNames);
...
private:
string firstNames;
string lastNames;
string socialSecurityNumber;
string gender;
};
我的.cpp文件:
#include "stdafx.h"
#include <ctime>
#include <string>
#include "Person.h"
using namespace std;
string Person::getFirstNames() const
{
return firstNames;
}
void Person::setFirstNames(string aFirstNames)
{
firstNames = aFirstNames;
}
string Person::getLastNames() const
{
return lastNames;
}
对于您在构造函数中可以看到的其他变量,函数会继续。每当我尝试构建它时,它会给我带来错误,例如:
'getFirstNames'不是'Person'的成员 'getFirstNames':非成员函数上不允许使用修饰符
'firstNames'未声明的标识符
我刚刚开始学习c ++并使用头文件但是来自Java背景并且不知道为什么会出现这些错误。从我在网上做过的研究来看,这应该有效,但显然没有。任何帮助都会很棒,谢谢。
答案 0 :(得分:2)
经OP确认(见问题评论):
.h文件缺少以下行:
using namespace std;
标头使用的是string
,它是std
命名空间的一部分。
或者,将所有string
个实例替换为std::string
(因此,不需要using namespace std
行。)
答案 1 :(得分:2)
Person
的定义出现在using namespace std
之前,因此标题中string
的使用无效。
头文件没有必须首先包含的依赖项,这是一个很好的做法,为了确保发生这种情况,我总是在库或系统头之前包含我的本地头文件:
#include "Person.h"
#include <ctime>
#include <string>
在标题中,确保其中包含所需内容:
#ifndef PERSON_H_INCLUDED
#define PERSON_H_INCLUDED
#include <string>
class Person
{
public:
Person(
std::string firstNames,
std::string lastNames,
std::string socialSecurityNumber,
std::string gender)
: firstNames(firstNames),
lastNames(lastNames),
socialSecurityNumber(socialSecurityNumber)
{}
...
};
#endif
不要在头文件中诱惑using namespace
- 这会将符号带入全局命名空间,并且对头文件的用户来说是粗鲁的。
(顺便说一下,关于i18n问题 - 小心假设每个人都有&#34;名字&#34;和#34;姓氏&#34;以及哪些(如果有的话)是a&#34;姓氏&#34; ...)