之前遇到过这个问题,但忘了我是怎么解决的。
我想使用STL字符串类,但编译器抱怨找不到它。 这是完整的.h文件。
#ifndef MODEL_H
#define MODEL_H
#include "../shared/gltools.h" // OpenGL toolkit
#include <math.h>
#include <stdio.h>
#include <string>
#include <iostream>
#include "Types.h"
class Model
{
public:
obj_type_ptr p_object;
char Load3DS (char *p_filename);
int LoadBitmap(char *filename);
int num_texture;
string fun("alex");
Model(char* modelName, char* textureFileName);
};
#endif
答案 0 :(得分:11)
您想使用std::string
,是吗?
您刚刚使用string
。如果你有一个using namespace ...
声明,哪个有效,但在头文件中不是一个好主意。
答案 1 :(得分:3)
STL中的每个标识符都在std
命名空间中。在您执行using namespace std;
,using std::string;
或typedef std::string xxx;
之前,必须将其设为std::string
。
标题中的任何类型的using
声明,尤其是在您自己的命名空间之外,都是一个坏主意,正如其他人所提到的那样。
所以,将std::string
导入您的班级:
class Model
{
typedef std::string string;
public:
答案 2 :(得分:1)
哦,std :: string。切勿在头文件btw中使用using命名空间。
答案 3 :(得分:1)
除了其他答案提到的命名空间问题外,您不能在其声明中将变量构造为类成员。假设您将其更改为
class Model {
// ...
std::string fun("alex");
};
这在一个类中仍然是非法的,你不能在声明中指定一个值,你必须离开它:
class Model {
// ...
std::string fun;
};
如果您想在创建时给它“alex”,请在构造函数中初始化它:
Model::Model(...)
: fun("alex") // initialiser
{
// ...
}