全局变量错误C
Global variable error C++
我有一个错误,我不知道如何在大型操作系统作业中修复。我遇到的错误是"架构x86_64的42个重复符号"。我认为这与我的全局变量文件" global.h"有关。我使用了3个全局变量," global.h"包含在一个称为" pagereplacementalgorithm.cpp"的摘要类中。我有大约6个类,这些类来自PagerePlacementAlgorithm类,它们利用了这些全局变量。我认为,当我需要在" main.cpp"中包含所有这些派生的类时,问题出现了,因为我需要制作新的实例。如何修复全局变量的实现?
global.h
#include "PageTableEntry.h"
using namespace std;
#ifndef Global_H
#define Global_H
extern PageTableEntry pageTable[64];
extern int* frameTable;
extern int framesCount;
#endif
pagereplacementalgorithm.h
#include "Global.h"
using namespace std;
#ifndef PageReplacementAlgorithm_H
#define PageReplacementAlgorithm_H
class PageReplacementAlgorithm {
public:
virtual int selectFrame(PageTableEntry &p) = 0;
};
#endif
示例派生类(FIFO)
include "PageReplacementAlgorithm.h"
using namespace std;
#ifndef FIFO_H
#define FIFO_H
class FIFO : public PageReplacementAlgorithm {
public:
FIFO();
int selectFrame(PageTableEntry &p);
private:
int entries;
};
#endif
main.cpp
#include "Aging.cpp"
#include "Clock.cpp"
#include "FIFO.cpp"
#include "MMU.cpp"
#include "NRU.cpp"
#include "Random.cpp"
#include "SecondChance.cpp"
为什么在main.cpp中包含所有CPP文件?我认为它们包含同样的内容,对吗?即使您在那里有警卫,您也可以在那个后卫之前进行其他功能,这可能是问题的根源。main.cpp可以仅包含类的main()函数和类导入的标题,因此无需包括CPP。
另外,您可以修改标头文件以使其看起来像这样(为了极端安全):
#ifndef PageReplacementAlgorithm_H
#define PageReplacementAlgorithm_H
#include "Global.h"
using namespace std;
...
#endif
我建议您查看答案C #include Guards
如果您摆脱了#include "(anything).cpp
,则情况应该更好。当您构建项目或运行编译器时,例如 g++ main.cpp foo.cpp
,那是这些.cpp
文件被构建并链接到程序的时候。
相关文章:
- 跨多个类的全局变量而不会出现重定义错误?
- C++ 给出编译器错误,将一个(静态)常量全局变量设置为另一个静态常量变量
- 在VS代码中使用全局变量时出现"undefined reference to"错误
- GUI QT全局变量错误
- 全局变量错误C
- 将大小设置为结构类型全局变量时发生编译器错误
- 全局变量和链接器错误
- 使用全局变量给出错误
- Seg 错误 - 将变量传递给方法会更改全局值
- 多个源文件中的外部全局变量未解决的链接器错误
- 包含文件会导致全局变量出现多个定义错误
- GCC在lambda函数中通过引用错误地捕获全局变量
- c++中的全局变量错误LNK2020
- c++错误:对全局变量和对象数组使用未声明的标识符
- 全局变量如何在销毁时产生错误,而局部变量却不会
- 头文件中的全局变量导致c++重定义错误
- 共享库中全局变量初始化时出现分段错误
- 分割错误在两个浏览器插件具有相同的全局变量
- 如何在循环外打印总和?我认为全局变量和局部变量的减速存在一些错误
- 当全局变量在头文件中声明为静态时,没有链接器错误