在本书的第43项中,据说下面的代码不会编译。
我的理解是,当方法LoggingMsgSender::sendClearMsg
被实现时会发生编译错误。
然而,对于三个编译器(VC 2005,gcc 4.4.1和一个用于嵌入式设备)我试过了。 它们都没有显示任何编译错误。
是否有任何编译器可以显示书中提到的错误? 欢迎任何建议。 谢谢你的帮助。
(我在我的源代码中找到了VC 2005中潜在的编译器错误 模板基类函数调用,这就是我想要编译错误的原因。 那是一个很长的故事...)
class CompanyX
{
public:
void sendClearText(){};
};
typedef int MsgInfo;
template<typename Company>
class MsgSender {
public:
void sendClear(const MsgInfo&)
{
Company c;
c.sendClearText();
}
};
template<typename Company>
class LoggingMsgSender : public MsgSender<Company> {
public:
void sendClearMsg(const MsgInfo& info)
{
sendClear( info ); // ERROR : will not compile despite clearly being in base class.
}
};
int main()
{
LoggingMsgSender<CompanyX> sender;
sender.sendClearMsg(1); // specialization of the method!!!
}
答案 0 :(得分:2)
http://liveworkspace.org/code/273c71cd53111dd8c6aaa54e64c53548。得到一个错误。在这种情况下,在函数sendClearMsg中我们应该使用this->sendClear(info);
编译器是gcc 4.7.1。所以,现在是2012年,你为什么要使用旧的编译器?