对使用 Code::Block 的类方法的未定义引用

Undefined reference to class methods using Code::Blocks

本文关键字:类方法 未定义 引用 Block Code      更新时间:2023-10-16
来自

Java/Eclipse世界,只是想复习一下C++并使用Code::Blocks。

正在制作一个基本类,并且在将其实现到我的主文件中时遇到问题。

获得"对'Time::Time(int, int, int)'的未定义引用",并对我的主文件中使用的所有方法进行未定义的引用.cpp错误。

尝试

重新生成,尝试将文件重新添加到控制台项目。不知道问题是什么。我对 Code::Blocks 相当生疏,所以也许这是显而易见的,任何帮助将不胜感激。

主.cpp

#include "Time.h"
#include <iostream>
using namespace std;
int main()
{
    //Time current();
    Time current(12,0,0);
    cout << "Current time." << endl;
    current.displayTime();
    cout << "nSet time to 22:29:30." << endl;
    current.setTime(22,29,30);
    current.displayTime();
    cout << "nAdd 45 minutes." << endl;
    current.addMinutes(45);
    current.displayTime();
    cout << "nAdd 45 seconds." << endl;
    current.addSeconds(45);
    current.displayTime();
    cout << "nAdd 1 hour." << endl;
    current.addHours(1);
    current.displayTime();
    return 0;
}

时间.h

#ifndef TIME_H
#define TIME_H
class Time
{
    public:
        Time(int h, int m, int s);
        Time(int h, int m);
        Time(int h);
        Time();
        virtual ~Time();
        void setTime(int h, int m, int s);
        void setTime(int h, int m);
        void setTime(int h);
        void addHours(int h);
        void addMinutes(int m);
        void addSeconds(int s);
        void displayTime();
        int getHours();
        void setHours(int h);
        int getMinutes();
        void setMinutes(int m);
        int getSeconds();
        void setSeconds(int s);
    protected:
    private:
        int hours;
        int minutes;
        int seconds;
};
#endif // TIME_H

时间.cpp

#include "Time.h"
#include <iostream>
using namespace std;
Time::Time(int h, int m, int s)
{
    hours = h;
    minutes = m;
    seconds = s;
}
Time::Time(int h, int m)
{
    hours = h;
    minutes = m;
    seconds = 0;
}
Time::Time(int h)
{
    hours = h;
    minutes = 0;
    seconds = 0;
}
Time::Time()
{
    hours = 0;
    minutes = 0;
    seconds = 0;
}
Time::~Time()
{
    //dtor
}
Time::void setTime(int h, int m, int s)
{
    hours = h;
    minutes = m;
    seconds = s;
}
Time::void setTime(int h, int m)
{
    hours = h;
    minutes = m;
    seconds = 0;
}
Time::void setTime(int h)
{
    hours = h;
    minutes = 0;
    seconds = 0;
}
Time::void addHours(int h)
{
    hours += h;
    if (hours > 23)
    {
        hours -= 24;
    }
}
Time::void addMinutes(int m)
{
    minutes += m;
    if (minutes > 59)
    {
        addHours(minutes / 60);
        minutes %= 60;
    }
}
Time::void addSeconds(int s)
{
    seconds += s;
    if (seconds > 59)
    {
        addMinutes(seconds / 60);
        seconds %= 60;
    }
}
Time::void displayTime()
{
    if (hours < 10)
    {
        cout << "0" << hours;
    }
    else
    {
        cout << hours;
    }
    cout << ":";
    if (minutes < 10)
    {
        cout << "0" << minutes;
    }
    else
    {
        cout << minutes;
    }
    cout << ":";
    if (seconds < 10)
    {
        cout << "0" << seconds;
    }
    else
    {
        cout << seconds;
    }
    cout << endl;
}
Time::void setHours(int h)
{
    if (h >= 0 && h <= 23)
    {
        hours = h;
    }
    else
    {
        cout << "Invalid input!n";
    }
}
Time::int getHours()
{
    return hours;
}
Time::void setMinutes(int m)
{
    if (m >= 0 && m <= 59)
    {
        minutes = m;
    }
    else
    {
        cout << "Invalid input!n";
    }
}
Time::int getMinutes()
{
    return minutes;
}
Time::void setSeconds(int s)
{
    if (s >= 0 && s <= 59)
    {
        seconds = s;
    }
    else
    {
        cout << "Invald input!n";
    }
}
Time::int getSeconds()
{
    return seconds;
}

类名位于方法名之前,而不是返回类型之前。

所以而不是例如

Time::void setTime(int h)
{
    hours = h;
    minutes = 0;
    seconds = 0;
}

它应该是

void Time::setTime(int h)
{
    hours = h;
    minutes = 0;
    seconds = 0;
}

Time.cpp 由于错误而无法编译,然后链接器找不到任何符号。