在课程中,在我的头文件中,在我的课程的私有部分
Heap_PriorityQueue<Passenger> oldBoardingQueue;
我在标题和cpp中都有#include "Heap_PriorityQueue.h"
只是为了安全。
我还没有开始在我的cpp文件中使用它,但是当我尝试编译cpp文件时抛出一堆:
undefiend reference to 'Heap_PriorityQueue<Passenger>::(insert function for Heap_PriorityQueue class isEmpty, add, etc.)
其次是几个
undefined reference to 'non-virtual thunk to Heap_PriorityQueue<Passenger>::(Heap_PriorityQueue functions again)
不确定如何继续。我是否错误地宣布了?
编辑:
Passenger是另一个用于创建持有乘客数据(名称,行,优先级/密钥等)的Passenger对象的类。
不确定'链接命令'是什么意思(我是学生/新手)但是airworthy.cpp和airworthy.h文件的makefile如下:
Airworthy.o: Airworthy.cpp Airworthy.h Heap_PriorityQueue.h NotFoundException.h PrecondViolatedExcep.h Passenger.h
g++ -std=gnu++11 -ggdb -c Airworthy.cpp
Airworthy.h如下:
#ifndef AIRWORTHY_H
#define AIRWORTHY_H
#include "Heap_PriorityQueue.h"
#include "Passenger.h"
using namespace std;
class Airworthy
{
private:
int oldBoardingSeconds;
int randomBoardingSeconds;
Heap_PriorityQueue<Passenger> oldBoardingQueue;
Heap_PriorityQueue<Passenger> randomBoardingQueue;
Passenger thisPassenger;
public:
Airworthy();
void inputFileData(ifstream& inputFile);
void loadQueue(ifstream& inputFile, ofstream& outputFile);
void runSim();
void setOldBoardingPriority();
void setRandomBoardingPriority();
};
#endif
刚刚意识到第一次使用Airworthy构造函数时出现错误,我现在已经空了。这是Airworthy.cpp的第一部分
#include "Airworthy.h"
#include "Heap_PriorityQueue.h"
#include "Passenger.h"
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <cstdlib>
using namespace std;
Airworthy::Airworthy()
{
}
尝试在构造函数中包含不同的东西(包括Heap_PriorityQueues),但似乎没有什么区别。在主cpp文件中调用构造函数会使该文件也生成相同的错误。
Heap_PriorityQueue.h如下:
#ifndef _HEAP_PRIORITY_QUEUE
#define _HEAP_PRIORITY_QUEUE
#include "ArrayMaxHeap.h"
#include "PriorityQueueInterface.h"
template<class ItemType>
class Heap_PriorityQueue : public PriorityQueueInterface<ItemType>,
private ArrayMaxHeap<ItemType>
{
public:
Heap_PriorityQueue();
bool isEmpty() const;
bool add(const ItemType& newEntry);
bool remove();
/** @pre The priority queue is not empty. */
ItemType peek() const throw(PrecondViolatedExcep);
}; // end Heap_PriorityQueue
#endif
我在我的智慧结束时,我一直试图让这个该死的东西现在工作几个小时。
答案 0 :(得分:0)
我认为可能的问题是您忘记在Heap_PriorityQueue.cpp
的makefile配方中包含Airworthy.o
。所以编译器正在查找队列函数的定义,而不是函数本身(这是链接阶段“未定义引用”的含义)
编辑:检查构建过程是否生成Heap_PriorityQueue.o
文件,以及此文件是否包含在创建exe的最终命令行中。