我在哪里将字符串库包含在我的C ++头文件中

时间:2011-09-16 20:04:12

标签: visual-c++ header-files

我的简单类不会在Visual Studio中编译。在我将字符串公司成员和getter方法getCo()添加到它之前,它工作正常。我想我需要将#include字符串标准库放在某个地方,但我不知道在哪里。知道在哪里?在我的头文件中,我有:

#pragma once
#ifndef ENGINEER_H_
#define ENGINEER_H_

class engineer {
    int years;
    string company;
public:
    engineer(int years);
    ~engineer(void);
    int getYears();
    string getCo();
};

#endif ENGINEER_H_

在我的CPP文件中定义了这个类,我有:

#include "StdAfx.h"
#include "engineer.h"

engineer::engineer(int y, string c){
    years = y;
    company = c;
}

engineer::~engineer(void) {
}

int engineer::getYears() {
    return years;
}

string engineer::getCo() {
    return company;
}

2 个答案:

答案 0 :(得分:12)

将它放在头文件中,并使用命名空间std作为字符串用法的前缀。

部首:

#include <string>

class engineer
{
   std::string company;
};

在实现文件(.cpp)中,您可以为名称添加前缀或使用using指令。

实现:

using namespace std;  // using directive, no longer need to use std::

避免将using指令放在头文件中,因为这会污染全局命名空间,并且可能会导致在您可能希望使用的其他库中命名冲突时出现问题。

答案 1 :(得分:1)

将其放在头文件中,包含防护后:

#include <string>
using std::string;

这样,它也可用于您的cpp文件,您不必再次包含它。

顺便说一句,#pragma once#ifndef ENGINEER_H_用于同一目的。你只能拥有其中一个。 VC生成的代码使用#pragma,它更短并且不添加定义,所以这就是我使用的(如果你放弃两者都没有坏处。)