Не в состоянии использовать строковый класс STL - PullRequest
1 голос
/ 09 февраля 2010

Обнаружил эту проблему раньше, но забыл, как я ее решил.

Я хочу использовать класс строки 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 ]

11 голосов
/ 09 февраля 2010

Вы хотите использовать std::string, да?

Вы просто используете string. Это работает, если у вас есть объявление using namespace ..., но это не очень хорошая идея в заголовочном файле.

3 голосов
/ 09 февраля 2010

Каждый идентификатор в STL находится в пространстве имен std. Пока вы не выполните using namespace std;, using std::string; или typedef std::string xxx;, он должен называться std::string.

Любая декларация using в заголовке, особенно вне вашего собственного пространства имен, - плохая идея, как уже упоминали другие.

Итак, импортируйте std::string в свой класс:

class Model
{
    typedef std::string string;

    public:
1 голос
/ 09 февраля 2010

Помимо проблемы с пространством имен, упомянутой в других ответах, нельзя создать переменную при ее объявлении в качестве члена класса. Предполагая, что вы изменили его на

class Model {
    // ...
    std::string fun("alex");
};

Это по-прежнему недопустимо в классе, вы не можете присвоить значение в объявлении, вы должны оставить его:

class Model {
    // ...
    std::string fun;
};

И если вы хотите дать ему "alex" при создании, инициализируйте его в конструкторе:

Model::Model(...)
    : fun("alex")  // initialiser
{
    // ...
}
1 голос
/ 09 февраля 2010

ооо, std :: string. Никогда не используйте пространство имен using в заголовочном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...