【问题标题】:C++ Unknown type name 'string'C ++未知类型名称'字符串'
【发布时间】: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,问题就解决了吗?

标签: c++ xcode string


【解决方案1】:

你必须使用std::string toString()或声明using namespace std;globally

【讨论】:

    【解决方案2】:

    确保还设置CMakeLists.txt 内的Point 类(标头和cpp)的路径。

    如果你使用的是 QT,它应该是这样的

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

    之后你需要像#include &lt;string&gt;这样在顶部导入字符串类,然后声明using namespace std;

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多