【发布时间】:2013-07-02 14:20:57
【问题描述】:
我有一个名为Time 的课程。只有两个私有成员:int hours 和 int minutes。公共访问说明符仅包含加法、减法等函数。
但是有一个特定的功能不符合我的要求。它在类中声明为public。
这样编译:
Time Time::operator*(const int &mult)
{
minutes = minutes*mult;
hours = hours*mult + minutes/60;
minutes %= 60;
return *this;
}
但如果参数不是 int,而是 float 或 double,该怎么办?我想使用模板是最好的选择,而不是重载函数:
template <class T> Time Time::operator*(const T &mult)
{
minutes = int(minutes*mult);
hours = int(hours*mult) + minutes/60;
minutes %= 60;
return *this;
}
但是,这样写会产生编译错误:
error LNK2019: unresolved external symbol "public: class Time __thiscall Time::operator*<int>(int const &) " (??$?DH@Time@@QBE?AV0@ABH@Z) referenced in function _main
这意味着我不能在模板中使用运算符重载还是什么?
谢谢
罗伯特
【问题讨论】:
-
您在哪里编写代码?模板成员函数需要在头文件(即.h或.hpp)中,而普通成员函数通常在实现文件(.cpp或.cxx)中定义
-
你应该把你的模板代码放在头文件中。
-
原型写在头文件中,定义写在实现文件中。喜欢这个功能。
-
您不能将模板函数或类拆分为头文件和源文件,调用者需要完整的定义,如果函数在另一个源文件中,则缺少完整的定义。始终将模板化的类和函数全部放在头文件中。
标签: c++ class templates operator-overloading member-functions