首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

《C++ Primer 第4版》第15章的两个疑点

2012-09-09 
《C++ Primer 第4版》第15章的两个疑问1.关于虚函数的使用class Item_base{public://...std::string get_isb

《C++ Primer 第4版》第15章的两个疑问
1.关于虚函数的使用

class Item_base{
public:
//...
  std::string get_isbn() { return ISBN; }
virtual ~Item_base(); //将此行注释掉后编译正常
private:
std::string ISBN;
double price;
};

int main()
{
Item_base item("20120727", 10);
cout << item.get_isbn() <<endl;
return 0;
}
编译后出现如下错误:
错误1error LNK2019: 无法解析的外部符号 "public: virtual __thiscall Item_base::~Item_base(void)" (??1Item_base@@UAE@XZ),该符号在函数 _main 中被引用ch15_1.obj

2.关于箭头操作符
class Sales_item{
public:
  //..
Item_base& operator*() { if(base) return *base; }
Item_base* operator->() { if(base) return base; }
private:
Item_base *base;
std::size_t *use;
};

inline bool compare(const Sales_item &lhs, const Sales_item &rhs)
{
return lhs->get_isbn() < rhs->get_isbn(); //这一句编译错误
}

int main()
{
Sales_item item1(Item_base("20120727", 10));
Sales_item item2(Item_base("20120728", 30));
if(item1->get_isbn() < item2->get_isbn()) //这一句编译正常
cout<< "item1 < item2" << endl;
return 0;
}

编译后出现如下错误:
错误1error C2678: 二进制“->”: 没有找到接受“const Sales_item”类型的左操作数的运算符(或没有可接受的转换)d:\vs2008 projects\ch15\ch15_1.cpp8
错误3error C2678: 二进制“->”: 没有找到接受“const Sales_item”类型的左操作数的运算符(或没有可接受的转换)d:\vs2008 projects\ch15\ch15_1.cpp8


希望高人解答,谢谢!

[解决办法]
第一个:析构函数没有定义;
第二个:get_isbn函数要声明为const,否则compare函数中const参数无法调用这个函数的。
[解决办法]
第一个:析构函数没有定义;
第二个:inline bool compare(... 函数中const的引用不能调用非const成员或成员函数。

热点排行