我无法弄清楚为什么我的代码会破坏,我可以使用一些帮助。
首先,代码:
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)'
正确方向的任何指针?谢谢!
答案 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...
。