【发布时间】:2016-11-27 05:58:39
【问题描述】:
我在大型操作系统作业中遇到了一个不知道如何解决的错误。我得到的错误是“架构 x86_64 的 42 个重复符号”。我认为这与我的全局变量文件“global.h”有关。我使用了 3 个全局变量,并且“global.h”包含在一个名为“PageReplacementAlgorithm.cpp”的抽象类中。我有大约 6 个类派生自 PageReplacementAlgorithm 类,它们利用这些全局变量。我认为当我在“main.cpp”中包含所有这些派生类时问题就来了,因为我需要为它们创建新实例。如何修复全局变量的实现?
全球.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"
【问题讨论】:
-
太棒了!你的来源在哪里? (将其包含在问题中)。
-
请发布您的源代码... :)
-
谢谢,刚刚发布了 :)
-
我只是重读了部分错误输出,它对于每个派生类的方法都有“重复符号 FIFO::selectFrame(PageTableEntry&)”。嗯,可能不是全局变量?
-
@Matrix21,正确!你是如何构建你的源的?您的编译器能否抓住所有源?所以你得到
FIFO一次来自Main.cpp和一次来自FIFO.cpp!?
标签: c++ operating-system global-variables