2014-04-11 48 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::前綴即可。