C2143错误c ++

时间:2011-11-21 15:53:30

标签: c++ string

对不起这个问题,但我被困了。 我有下面的语法:

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 个答案:

答案 0 :(得分:6)

它希望你告诉他哪个字符串。你想要标准的那个:

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"; }
};

答案 1 :(得分:3)

您需要完全限定字符串或将其带入当前命名空间:

std::string* name();

using std::string;

在标题中,污染全局命名空间通常被认为是不好的做法,所以首先是首选。

答案 2 :(得分:1)

编译器不知道字符串是什么,因为字符串驻留在命名空间std中,而不是在全局命名空间中。您需要将字符串更改为std :: string。

在cpp文件中,您可以使用“using namespace std;”或“使用std :: string;”然后只写“字符串”。但是你永远不应该在头文件中使用using-namespace-declarations。

BTW,正如其他人所说返回一个字符串*是不常的,通常你会返回一个字符串。