2014-10-18 31 views
-2

我試圖創建並打印2D陣列的一些字母(在未來的我會改變這些陣列的值):創建與印刷的2D陣列中的C++

terrain.cpp

#include "stdafx.h" 
#include <iostream> 
#include <vector> 

using std::vector; 
using std::string; 

void create_terrain(int size) 
{ 
    string** map; 
    map = new string*[size]; 
    for (int i = 0; i < size; ++i) 
     map[i] = new string[size]; 

    for (int i = 0; i < size; ++i) 
    { 
     for (int j = 0; j < size; ++j) 
     { 
      map[i][j]= "[ ]"; 
     } 
    } 

} 

void print_terrain(int size, string** map) 
{ 
    for (int i = 0; i < size; ++i) 
    { 
     for (int j = 0; j < size; ++j) 
     { 
      std::cout.width(5); 
      std::cout << map[i][j]; 
     } 
    } 
} 

void delete_terrain(int size, string** map) 
{ 
    for (int i = 0; i < size; i++) 
     delete[] map[i]; 
    delete[] map; 
} 

類的.cpp:

#include "stdafx.h" 

void create_terrain(int); 
void print_terrain(int size, string** map); 
void delete_terrain(int size, string** map); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    create_terrain(10); 
    print_terrain(10, **map); 
    //... 
    delete_terrain(10, **map); 
} 

Compilator給了我一些錯誤: errors

我使用Microsoft Visual Studio 2013.

+0

請問爲什麼兩個**爲地圖? – 2014-10-18 10:37:58

+0

我在那裏發現http://www.cplusplus.com/forum/articles/7459/ – Kulis 2014-10-18 10:40:07

回答

1

如何做這樣的事情,並擺脫所有這些瘋狂的指針和新/刪除。儘管你的錯誤是因爲你在create_terrain子文件中創建了一個map var。然後主要你正在嘗試使用它。 IE不在主要範圍內。

#include <iostream> 
#include <vector> 

using std::vector; 
using std::string; 

using MAP_GRID = vector<vector<string>>; 

MAP_GRID create_terrain(int size) 
{ 
    MAP_GRID map; 

    for (int i = 0; i < size; ++i) { 
     map.emplace_back(vector<string>()); 
     for (int j = 0; j < size; ++j) { 
      map[i].emplace_back("[ ]"); 
     } 
    } 

    return map; 
} 

void print_terrain(MAP_GRID map) 
{ 
    for (int i = 0; i < map.size(); ++i) { 
     for (int j = 0; j < map[i].size(); ++j) { 
      std::cout.width(5); 
      std::cout << map[i][j].c_str(); 
     } 
     std::cout << std::endl; 
    } 
} 

int main() 
{ 
    MAP_GRID map = create_terrain(10); 
    print_terrain(map); 


    std::cout << std::endl; 
    system("PAUSE"); 
} 
1

第一個錯誤告訴您std::string沒有這樣的操作符,請嘗試使用c_str()。 接下來的兩個錯誤是關於map變量未定義,修改create_terrain,以便它返回一個指向你的數組的指針。