C ++ g ++ не может найти тип 'string' в заголовочном файле класса - PullRequest
5 голосов
/ 04 февраля 2011

Я новичок в C ++, но не могу понять, почему это не скомпилируется для меня. Я работаю на Mac, кодирую с помощью Xcode, но я создаю свой собственный make-файл из bash.

Во всяком случае, я получаю две ошибки компилятора, что «строковый» тип не может быть найден, хотя я включил. Любая помощь будет приветствоваться. Код:

//#include <string> // I've tried it here, too. I'm foggy on include semantics, but I think it should be safe inside the current preprocessor "branch"
#ifndef APPCONTROLLER_H
#define APPCONTROLLER_H

#include <string>
class AppController {
// etc.
public:
    int processInputEvents(string input); //error: ‘string’ has not been declared
    string prompt(); //error: ‘string’ does not name a type
};
#endif

Я включаю этот файл в свой main.cpp, а в другом месте main я использую тип string, и он работает просто отлично. Хотя в основном я включил iostream вместо string (для других целей). Да, я также пытался включить iostream в свой класс AppController, но это ничего не решало (я и не ожидал этого).

Так что я не совсем уверен, в чем проблема. Есть идеи?

1 Ответ

31 голосов
/ 04 февраля 2011

строка находится в пространстве имен std.

#include <string>
...
std::string myString;

В качестве альтернативы вы можете использовать

using namespace std;

Однако это очень плохая вещь в заголовках, так как она загрязняет глобальныйпространство имен для всех, кто включает указанный заголовок.Это нормально для исходных файлов, хотя.Существует дополнительный синтаксис, который вы можете использовать (который имеет некоторые из тех же проблем, что и использование пространства имен):

using std::string;

Это также приведет к введению имени типа строки в глобальное пространство имен (или текущее пространство имен),и как таковой, как правило, следует избегать в заголовках.

...