gpt4 book ai didi

c++ - 对象在头文件中列出,但在 cpp 文件中 undefined reference

转载 作者:太空宇宙 更新时间:2023-11-04 13:34:34 51 4
gpt4 key购买 nike

在类中,在我的头文件中,在类的私有(private)部分中我有

 Heap_PriorityQueue<Passenger> oldBoardingQueue;

为了安全起见,我在 header 和 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

我已经无计可施了,几个小时以来我一直在努力让这个该死的东西工作。

最佳答案

我认为可能的问题是您忘记在 Airworthy.o 的 makefile 配方中包含 Heap_PriorityQueue.cpp。所以编译器正在寻找队列函数的定义,而不是函数本身(这就是链接阶段“ undefined reference ”的含义)

编辑:检查构建过程是否生成了 Heap_PriorityQueue.o 文件,以及该文件是否包含在创建 exe 的最终命令行中。

关于c++ - 对象在头文件中列出,但在 cpp 文件中 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30084253/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com