我试图用一些字母创建和打印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给了我一些错误:
我使用Microsoft Visual Studio 2013。
答案 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");
}