2014-10-18 35 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,以便它返回一个指向你的数组的指针。