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

时间:2014-04-19 12:45:46

标签: c++ undefined-reference

我是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退出状态

1 个答案:

答案 0 :(得分:0)

您需要编译(并编译)两个.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

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