1

在本书的第 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!!!
}
4

1 回答 1

2

例如http://liveworkspace.org/code/273c71cd53111dd8c6aaa54e64c53548 。得到一个错误。在这种情况下,在函数 sendClearMsg 中我们应该使用this->sendClear(info);编译器是 gcc 4.7.1。所以,现在是 2012 年,为什么你使用旧的编译器?

于 2012-07-14T03:42:16.270 回答