获取头文件以使用.cpp文件

时间:2015-09-07 01:47:08

标签: c++ header-files

我正在尝试学习如何将.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背景并且不知道为什么会出现这些错误。从我在网上做过的研究来看,这应该有效,但显然没有。任何帮助都会很棒,谢谢。

2 个答案:

答案 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; ...)