【发布时间】:2010-12-06 00:58:50
【问题描述】:
对于初学者来说,这是家庭作业,我很清楚自己应该做什么,但我显然遗漏了一些东西。
我目前有一个名为“Person”的抽象基类。我有 3 个继承人的类,它们是 Staff、Faculty 和 Student。
我正在尝试按姓氏组织所有“人”的名字。所以我必须重载'
函数我已经写好了,但我就是不知道放在哪里。
功能:
bool operator < ( const Faculty &right )
{
if( getLastName() >= right.getLastName() == 0 )
return true;
return false;
}
我应该把它放在我所有派生类的头文件中,还是应该把它作为一个虚函数放在基类 Person 中?或者我应该两者都做。目前我正在做这两项工作,但每个文件都出现错误。
错误:
error C2662: 'Person::getLastName' : cannot convert 'this' pointer from
更新: 我已将我的功能更改为:
bool operator < ( const Person &right )
{
return LastName >= right.getLastName();
}
在听取了其他人的建议后,我只将这个功能放在了“Person”中,并使其不是虚拟的。然而,我仍然得到 5 个完全相同的错误,它们都指向这个函数。
错误:
'Person::getLastName' : cannot convert 'this' pointer from 'const Person' to 'Person &'
如果它对任何人都有帮助,这里是我的“Person.h”的代码:
class Person
{
private:
string FirstName,
LastName,
MiddleName,
SSN;
string FullName;
public:
Person();
Person(string, string, string, string);
Person(string);
string getFirstName();
string getLastName();
string getMiddleName();
string getSSN();
string getFullName();
void setFirstName(string);
void setLastName(string);
void setMiddleName(string);
void setSSN(string);
void setFullName(string);
virtual string getIdentity()
{
return FirstName + " " + MiddleName + " " + LastName + " " + SSN;
}
bool operator < ( const Person &right )
{
return LastName >= right.getLastName();
}
virtual string getPurpose() = 0;
};
【问题讨论】:
-
您的错误输出被切断。请发布整个错误消息。
-
该错误与您的问题无关:msdn.microsoft.com/en-us/library/2s2d2tez%28VS.80%29.aspx
getLastName应该是const成员函数。 (我猜getLastName是非常量的,因为您的operator<是非常量)。 -
@Steve Jessop:你不知道错误与
const-ness 相关,因为你看不到错误。您的链接仅表明该问题可能与const-ness 有关。 -
@robert:有根据的猜测,如我的评论中所述。
-
我已为我的问题添加了更新
标签: c++ string operator-overloading alphabetical