未定义的对/的引用无法解析重载函数的地址

undefined reference to / cannot resolve address of overloaded function

本文关键字:重载 地址 函数 引用 未定义      更新时间:2023-10-16

我是c++的新手,很难让一些简单的东西正常工作。当我使用g++时,我会得到上面显示的两种类型的错误之一。我浏览了论坛,发现这是一个常见的问题,但当我用一个答案修复时,我在使用g++时会遇到另一个错误。我有兴趣更好地理解这一点。

#ifndef ORDEREDLIST_H_
#define ORDEREDLIST_H_
#include <iostream>
using namespace std;
class Node
{
public:
double item; // data item
Node *next; // pointer to next node
};
class OrderedList
{
// friend operator functions
friend ostream &operator<<(ostream &, const OrderedList &);
friend istream &operator>>(istream &, OrderedList &);
public:
// constructors
OrderedList():_head(NULL),_size(0) {};
OrderedList(const OrderedList &); // copy constructor
// destructor
~OrderedList();
// operator functions
OrderedList operator+(OrderedList&); // merges two OrderedLists
double operator[](int) const; // subscript operator returns rvalue
const OrderedList &operator=(const OrderedList &); // assignment
void insert(double); // inserts an item
bool remove(int); // remove i th item
void pop(); // pop the first item
void tester();
private:
Node *_head;
int _size;
};

#endif /* ORDEREDLIST_H_ */

类函数在这里:(注意,我只包含了代码的一部分)

#include <iostream>
#include "OrderedList.h"
using namespace std;
OrderedList::OrderedList():_head(NULL),_size(0) {};
//OrderedList::OrderedList(const OrderedList &); // copy constructor
OrderedList::~OrderedList(){
    //nothing
};
void OrderedList::pop()
{
    //nothing yet
}

然后,对pop函数的简单测试调用(目前什么都不做)就不起作用了。我只是想让下面的代码识别pop()函数,这样我就可以继续增量构建我的程序了。

#include <iostream>
#include "OrderedList.h"
using namespace std;

int main()
{
    OrderedList* List_A = new OrderedList;
    cout<<"Hello"<<endl;
    List_A->pop();
    return 0;
};

我得到的确切错误是:在函数main': ass2q1.cpp:(.text+0x46): undefined reference to OrderedList::pop()'中collect2:错误:ld返回1退出状态

您需要编译(并且仅编译)两个.cpp文件,然后将所有内容链接在一起:

# compile source files to object files
g++ -std=c++11 OrderedList.cpp -c -o OrderedList.o
g++ -std=c++11 ass2q1.cpp -c -o ass2q1.o
# link the object files to an executable
g++ ass2q1.o OrderedList.o -o ass2q1

(当然,这只是一个(常见)选项)