【发布时间】:2016-07-22 16:53:21
【问题描述】:
我正在处理 C++ 头文件,但不断收到错误消息“未知类型名称 'string';您的意思是 '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
【问题讨论】:
-
永远不要将“use namespace std”放在头文件中。更好的是,never put "use namespace std" anywhere。只需忘记 C++ 中存在“使用命名空间”即可。完全忘掉它。引用类时始终使用完整的命名空间限定,即“std::string”。
-
不相关,但公共成员变量通常不是一个好主意。在这种情况下,我会改用
toString方法。 -
Sam,我也听取了其他人的建议,这很有道理。不幸的是,这是一个类分配,我们需要使用“using namespace std;”按照我们教练的指示。
-
很遗憾听到您的讲师不称职。也许您能做的最好的事情是将“使用命名空间标准”移动到 .cpp 文件中,而不是头文件中。如果您的讲师告诉您将其放在头文件中,那么如果您可以放弃这门课程并选择其他讲师,您应该这样做。你不会让任何人来帮助你学习糟糕的编程实践,抱歉。
-
我认为你不可能得到这个错误,至少在我们看到的粘贴代码中是这样。也许该错误与您未在此处包含的其他代码片段有关,例如之前声明的名称为“string”的其他函数或变量,或者宏的某些问题。如果你写
std::string,问题就解决了吗?