对不起这个问题,但我被困了。 我有下面的语法:
class xx
{
..some simple fields like: int t; // )))
public: class anotherClass;
xx();
MyObj* obj();
string* name(); //error C2143: syntax error : missing ';' before '*'
}
我写了# include <string>
编译器想要什么?!
答案 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,正如其他人所说返回一个字符串*是不常的,通常你会返回一个字符串。