C++ 未知类型名称 'string'。

3

我正在处理一个C++头文件,但是出现了错误“Unknown type name 'string'; did you mean 'std::string'?”。我的代码顶部已经包含了#include <string>,所以我不知道该如何解决这个问题。你有什么想法吗?如果有的话,请告诉我。我使用的是Xcode,如果这有任何区别。

#ifndef POINT_HPP
#define POINT_HPP
#include <string>
using namespace std;

class Point {
public:
    Point();
    Point(int pInitX, int pInitY);
    Point(int pInitX, int pInitY, int pInitColor);
    double distance(Point pAnotherPoint);
    int getColor();
    int getX();
    int getY();
    void move(int pNewX, int pNewY);
    void setColor(int pNewColor);
    void setX(int pNewX);
    void setY(int pNewY);
    string toString; // Error: Unknown type name 'string'; did you mean 'std::string'?
private:
    void init(int pInitX, int pInitY, int pInitColor);
    int mColor;
    int mX;
    int mY;
};

#endif

1
永远不要在头文件中放置"use namespace std"。更好的做法是,无论何时都不要放置"use namespace std"。完全忘记在C++中存在"use namespace"这个概念。始终在引用类时使用完整的命名空间限定,例如"std::string"。 - Sam Varshavchik
无关的,但是公共成员变量通常不是一个好主意。在这种情况下,我会将toString改为一个方法。 - MrEricSir
Sam,我也听到了其他人的建议,觉得很有道理。不幸的是,这是一项课程作业,根据我们导师的指示,我们必须使用"using namespace std;"。 - m-use
3
很遗憾听到你的讲师不称职。也许最好的方法是将"use namespace std"放入.cpp文件中,而不是头文件中。如果你的讲师告诉你要把它放在头文件中,那么如果你能够退出这门课程,并选择另一位讲师,那你应该这样做。抱歉,我们不能帮助你学习糟糕的编程实践。 - Sam Varshavchik
我认为你遇到的错误是不可能的,至少根据我们看到的粘贴代码来说是这样。也许错误与其他未在此处包含的代码片段有关,比如先前声明的其他函数或变量名为“string”,或者一些宏定义问题。如果你写成std::string,问题就解决了吗? - ABu
2个回答

2

你必须使用std::string toString()或者在全局声明using namespace std;


0

请确保在CMakeLists.txt中设置Point类(头文件和cpp)的路径。

如果您正在使用QT,则应该是这样的:

set(PROJECT_SOURCES
        ...
        point.cpp
        point.h
)

接下来,您需要在顶部导入字符串类,如下所示:#include <string>,然后声明using namespace std;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接