不能使用STL的字符串类

时间:2010-02-09 02:45:36

标签: c++ string stl

之前遇到过这个问题,但忘了我是怎么解决的。

我想使用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

4 个答案:

答案 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
{
    // ...
}