C ++'string'没有在标题中命名类型

时间:2014-04-11 16:25:42

标签: c++

Eugh,一天有2个问题。我有一个你听到这么多的糟糕日子。我一直在组织我的小项目,以减少它的混乱。这是在开发的开始,所以没有太多的进展。我在下面有这个标题

#pragma once
#include <string>

class Game_Map
{
    private:
        int map_width;
        int map_height;
        string map_data [50][50]
    public:
        Game_Map(int default_width = 20,int default_height = 20)
        ~Game_Map()
};

现在据我所见,应该没有任何问题。我避免使用“使用”,我保持编程直到现在基本以防止外部干扰。但我是100%的时间得到“map.h:9:9:错误:'字符串'没有命名类型”

我确信我错过了一些东西。谁能看到我出错的地方?

3 个答案:

答案 0 :(得分:9)

更改

string map_data [50][50]

std::string map_data [50][50];

这是必要的,因为string属于std名称空间。

不要在头文件中使用“using”声明或指令。

答案 1 :(得分:1)

使用完全限定名称(首选)作为

std::string map_data [50][50];

或使用声明

using std::string;
string map_data [50][50];

或使用指令

using namespace std;
string map_data [50][50]'

答案 2 :(得分:0)

你似乎在某些行的末尾错过了一些分号:

class Game_Map
{
...
    string map_data [50][50]  // Missing ;
public:
    Game_Map(int default_width = 20,int default_height = 20)  // Missing ;
    ~Game_Map() // Missing ;
};

此外,当您#include <string>时,标识STL字符串类的“完整名称”为std::string(因为STL字符串类位于std::名称空间下)。

所以,只需在此行中使用 std::string 代替string

std::string map_data[50][50];

请注意,在头文件中,您不应使用“using directives”(例如using namespace std;),以避免“污染”#include您的头文件的客户端的全局命名空间。 只需在头文件中指定带有std::前缀的STL类名称。