C ++“undefined reference to ......”

时间:2011-10-18 17:08:53

标签: c++ compiler-errors

我无法弄清楚为什么我的代码会破坏,我可以使用一些帮助。

首先,代码:

Timer.h:

#include [...]

class Timer {
    public:
        [...]
        Timer operator+(double);
        [...]
    private:
        [...]
        void correctthedate(int day, int month, int year);
        [...]
};

Timer.cc:

#include "Timer.h"
using namespace std;

[...]

void correctthedate(int day, int month, int year) {
    [...]
}

[...]

Timer Timer::operator+(double plush) {
    [...]
    correctthedate(curday, curmonth, curyear);
    return *this;
}

当我尝试编译时,我收到错误:

Timer.o: In function `Timer::operator+(double)':
Timer.cc:(.text+0x1ad3): undefined reference to `Timer::correctthedate(int, int, int)'

正确方向的任何指针?谢谢!

4 个答案:

答案 0 :(得分:7)

以下一行:

void correctthedate(int day, int month, int year) {

应该阅读

void Timer::correctthedate(int day, int month, int year) {

否则,您只需定义一个名为correctthedate()的无关函数。

答案 1 :(得分:5)

void Timer::correctthedate(int day, int month, int year) {

你的correctthedate定义是一个自由函数,虽然没有原型。您必须使用Timer::

来限定名称

答案 2 :(得分:2)

替换它:

void correctthedate(int day, int month, int year) {

有了这个:

Timer::correctthedate(int day, int month, int year) {

在您的版本中,correctthedate只是一个普通的函数,恰好它与Time的方法之一具有相同的名称。 Time::correctthedate是一个完全不同的函数(方法),它没有定义,所以链接器抱怨它无法找到它。

答案 3 :(得分:1)

您的标头声明了Timer::operator+Timer::correctthedate功能 您的cpp定义了Timer::operator+::correcttehdate函数 链接器找不到Timer::correctthedate

答案是将void correctthedate(int...更改为void Timer::correctthedate(int...