C2143 ошибка c ++ - PullRequest
       1

C2143 ошибка c ++

0 голосов
/ 21 ноября 2011

Извините за этот вопрос, но я застрял. У меня есть следующий синтаксис:

class xx
{
..some simple fields like: int t;  // )))
public: class  anotherClass;
xx();
MyObj* obj();
string*  name(); //error C2143: syntax error : missing ';' before '*'   

}

у меня есть запись # include <string> Чего от меня хочет компилятор?!

Ответы [ 3 ]

6 голосов
/ 21 ноября 2011

Он хочет, чтобы вы сказали ему , какую строку. Вы хотите стандартный:

class xx
{
  public:
    std::string*  name();
};

Теперь я не уверен, почему вы возвращали бы указатель на строку. Это ошибка сегментации, которая должна произойти, если вы спросите меня. Еще два жизнеспособных варианта, которые кажутся мне разумными:

class xx
{
    std::string _name;
  public:
    const std::string& name() const 
    { 
        return _name; // WARNING: only valid as long as 
                      // this instance of xx is valid
    }
};

или

class xx
{
  public:
    std::string name() const { return "hello world"; }
};
3 голосов
/ 21 ноября 2011

Вам необходимо либо полностью квалифицировать строку, либо перенести ее в текущее пространство имен:

std::string* name();

или

using std::string;

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

1 голос
/ 21 ноября 2011

Компилятор не знает, что такое строка, потому что строка находится в пространстве имен std, а не в глобальном пространстве имен.Вам нужно изменить строку на std :: string.

В вашем файле cpp вы можете использовать «using namespace std;»или "используя std :: string;"а затем просто напишите «строка».Но вы никогда не должны использовать using-namespace-объявлений в заголовочных файлах.

Кстати, как говорят другие, возвращать строку * - это необычно, обычно вы возвращаете строку.

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