【发布时间】:2020-03-30 04:26:55
【问题描述】:
我的 Ifndef 不工作。我在两者中都包含两次 MapData.h:Generate.cpp 和 Risky Strats.cpp
地图数据.h:
#ifndef MAPDATA
#define MAPDATA
#include <iostream>
#include <vector>
class bases {
public:
int x;
int y;
};
class field {
public:
std::vector <bases> map;
};
field battleground;
#endif //MAPDATA
生成.cpp:
#include <stdlib.h>//Randomness
#include <time.h>//time
#include <math.h>
#include "MapData.h"
Risky Strats.cpp:
#include <SFML/Graphics.hpp>
#include "MapData.h"
我不断收到同样的错误: 类场战场" (?battleground@@3Vfield@@A) 已在 Generate.obj 中定义
【问题讨论】:
-
...问题是什么?
-
ifndef工作正常,因为您的错误是 linker 错误,而不是编译错误。你误解了这个构造的目的是什么。这是为了确保对于编译的每个模块,包含文件中的代码被看到一次。 -
这能回答你的问题吗? Why error LINK2005: object already defined error disappears when I declare the object as static 另请参阅One or more multiply defined symbols found 的答案,它们解决了相同的潜在误解,只是将函数作为症状而不是变量。