我有以下代码,但编译器说 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;
};
类型的前向声明只能用于解析涉及的声明pointers and 参考到那种类型。
在类型完全定义之前,编译器对类型一无所知;例如它有哪些成员,或者它有多大。因此,您不能将它用作结构的按值成员,因为编译器不知道要使其有多大,也不知道它的构造函数和析构函数是否是公共的。另一方面,你可以自由地做类似的事情send_wrapper *_p_sender;
,因为指向结构的指针始终具有相同的大小。但您仍然无法访问其成员函数等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)