2014-04-11 44 views
0

Eugh,一天内有2个问题。我有一个很糟糕的日子,你听到这么多。我一直在组织我的小型项目,以减少混乱。这是在开发的开始,所以没有太多的事情发生。我有下面这个标题C++'string'没有在头文件中指定一个类型

#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:错误:'字符串'没有命名类型”

我确定我错过了什么。任何人都可以看到我出错的地方吗?

+0

'#pragma once'是不可移植的。改为使用标准的包含警卫。 – Deduplicator

+0

标准包括警卫? –

+0

'#ifndef GUARD_Game_Map \ n #define GUARD_Game_Map \ n/*您的代码*/\ n#endif' – Deduplicator

回答

1

使用一个完全合格的域名(最好)作为

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

或使用using声明

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

或使用指令

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

在头文件中既不应该使用'using'也不要使用'namespace' ... – Massa

+0

@Massa你能指出我在哪里说使用应该包含在头文件中?! –

+0

它在原始问题的标题中,在页面顶部......'C++'字符串'不会在头部命名一个类型' – Massa

8

变化

string map_data [50][50] 

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

,由于串属于std命名空间是必要的。

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

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 string类是std::string(因为STL string类位于std::命名空间下)。

所以,只要使用std::string,而不是string在这条线:

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

注意,在头文件,你应该“使用的指令”(例如using namespace std;)不能使用,以避免“污染”包含头文件的客户端的全局命名空间。 只需在头文件中指定STL类名称及其std::前缀即可。