将结构发送到函数时遇到一些问题:
这是我的main.cpp文件:
#include "stdafx.h"
#include "vehicles.h"
#include <iostream>
#include "tools.h"
#include <time.h>
#include <vector>
using MAP_GRID = vector<vector<string>>;
using namespace std;
void print_terrain(MAP_GRID);
void set_position(MAP_GRID &, int, int, position &, string);
void random_position(MAP_GRID &, int, string);
MAP_GRID create_terrain();
MAP_GRID MAP = create_terrain();
int _tmain(int argc, _TCHAR* argv[])
{
tanks t34(12, 0.5, 21,6);
srand(time(NULL));
set_position(MAP, 5, 5, player,"[x]");
//[...]
}
这是另一个文件,定义了这个函数:
#include "stdafx.h"
#include <iostream>
#include <vector>
#define MIN_SIZE 6
#define MAX_SIZE 15
using std::vector;
using std::string;
using MAP_GRID = vector<vector<string>>;
int global_size;
struct position{
vector<int> x;
vector<int> y;
};
void set_position(MAP_GRID &MAP, int x, int y, position &pos, string object)
{
if (x <= MAP.size() || y <= MAP.size())
if (MAP[x][y] != "[ ]")
std::cout << "\nPosition is occupied" << std::endl;
else
{
MAP[x][y] = object;
pos.x.push_back(x);
pos.y.push_back(y);
}
else
std::cout << "\Choose correct position" << std::endl;
}
这个结构必须保持某个点的坐标(这些点的数量取决于对象)。
答案 0 :(得分:1)
这与向量没有任何关系(正如你已经发现的那样,如果你在多次艰苦地调试这个问题的过程中构建了minimal testcase)。
在使用它们之前,您必须至少在每个要使用它们的翻译单元中声明标识符。
你还没有这样做,所以main.cpp的编译会失败,因为它确实不知道position
应该是什么。 player
同样是一个完全的谜。
通常我们在“头文件”中定义类型,以便在多个翻译单元中轻松包含这些定义。在这种情况下,您至少可以获得position
的前瞻性声明。