结构与向量

时间:2014-10-22 14:29:11

标签: c++ c++11 vector structure

将结构发送到函数时遇到一些问题: errors

这是我的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;
}

这个结构必须保持某个点的坐标(这些点的数量取决于对象)。

1 个答案:

答案 0 :(得分:1)

这与向量没有任何关系(正如你已经发现的那样,如果你在多次艰苦地调试这个问题的过程中构建了minimal testcase)。

在使用它们之前,您必须至少在每个要使用它们的翻译单元中声明标识符。

你还没有这样做,所以main.cpp的编译会失败,因为它确实不知道position应该是什么。 player同样是一个完全的谜。

通常我们在“头文件”中定义类型,以便在多个翻译单元中轻松包含这些定义。在这种情况下,您至少可以获得position的前瞻性声明。