繁体   English   中英

struct forward声明编译失败

[英]struct forward declaration fails compile

我有以下代码,但编译器说sender_wrapper未定义,即使我转发声明它。 我可以不做结构的前向声明吗? (用VS2003编译)

struct send_wrapper;

struct IPSend
{
    IPSend::IPSend(const send_wrapper& sender) : _sender(sender) {}

    void IPSend::operator()(const std::string& msg)
    {           
        if (!msg.empty())
            _sender.send(msg);
    }

    send_wrapper _sender; //error C2079: 'IPSend::_sender' uses undefined struct 'send_wrapper'

};

struct send_wrapper 
{
std::auto_ptr<tcp_server> server;

};

类型的前向声明只能用于解析涉及指针和对该类型的引用的声明。

在完全定义类型之前,编译器对类型一无所知; 例如,它拥有什么成员,或者它有多大。 因此,您不能将它用作结构的按值成员,因为编译器不知道它有多大,或者它的构造函数和析构函数是公共的。 另一方面,你可以自由地做一些像send_wrapper *_p_sender; ,因为指向结构的指针总是相同的大小。 但是你仍然无法访问其成员函数等。

我可以不做结构的前向声明吗?

是的,但仅适用于此类struct引用和指针。 一旦你开始里面戳,如访问它的成员,您需要的完整的声明struct -否则,怎么编译器会知道你的发件人拥有send()函数?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM