【发布时间】:2014-04-30 09:29:29
【问题描述】:
我正在尝试设计这样的类,其中一个是模板类,但我遇到了模棱两可的错误。
template <class v>
class Base
{
protected:
vector <v> data;
void sortByStr (string (v::*) () );
};
class Person : Base <Person>
{
string szSurname;
string szPhoneNum;
public:
Person (string surname = "default", string phoneNum = "000 000 000")
: szSurname (surname), szPhoneNum (phoneNum)
{
};
virtual void sortBySurname() {sortByStr (&Person::getSurname);};
virtual void sortByPhone() {sortByStr (&Person::getPhone);};
};
class Worker : public Base <Worker>,
public Person
{
private:
string szPosition;
int nAge;
bool isBusy;
public:
Worker (string surname = "Not Specified",
string phone = "000-000-000",
string position = "none",
short age = 0,
bool busy = 0);
: Person (surname, phone), szPosition (position), nAge (age), isBusy (busy)
{};
void sortByPosition(){sortByStr (&Worker::getPosition);}; // <-sortByStr ambiguous
void sortByAge() {sortByNum (&Worker::getAge);}; // <-sortByStr ambiguous
void sortByStatus() {sortByBool(&Worker::getBusyStatus);}; // <-sortByStr ambiguous
};
我明白了:
/Projekt v1.0/people.h||在成员函数‘void Worker::sortByPosition()':|
/Projekt v1.0/people.h|76|错误:对‘sortByStr’的引用是 模棱两可|
/Projekt v1.0/base.h|17|注意:候选人是:void Base::sortByStr(std::string (v::*)()) [with v = Person;标准::字符串 = std::basic_string]|
/Projekt v1.0/base.h|17|注:无效 Base::sortByStr(std::string (v::*)()) [with v = Worker;标准::字符串 = std::basic_string]|
在这个具体的例子中是否可以避免这样的错误? 我试图(仅用于检查)实现仅从 Base 派生的类 Worker。它有效,但我需要在我的项目中从 Worker 访问 Person。 我真的很感谢帮助:)
【问题讨论】: