我的简单类不会在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;
}
答案 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
,它更短并且不添加定义,所以这就是我使用的(如果你放弃两者都没有坏处。)