创造&用C ++打印2D数组

时间:2014-10-18 10:29:57

标签: c++ arrays visual-studio-2013 multidimensional-array

我试图用一些字母创建和打印2D数组(将来我将更改这些数组的值):

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;
}

class.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。

2 个答案:

答案 0 :(得分:1)

第一个错误告诉您std::string没有此类运算符,请尝试使用c_str()。 接下来的两个错误是map变量未定义,修改create_terrain以便它返回指向数组的指针。

答案 1 :(得分:1)

如何做这样的事情,摆脱所有疯狂的指针和新/删除。但是你的错误是因为你在create_terrain sub中创建了一个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");
}