la déclaration de structure avant échoue à la compilation
J'ai le code suivant, mais le compilateur dit sender_wrapper est pas défini, même si j'ai de l'avant, l'a déclaré. Je ne peux pas le faire avant de déclarer d'une struct? (compilé avec 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;
};
source d'informationauteur Tony The Lion
Vous devez vous connecter pour publier un commentaire.
En avant les déclarations de types ne peuvent être utilisés pour résoudre des déclarations impliquant pointeurs et références de ce type.
Avant que le type a été entièrement défini, le compilateur ne sait rien à propos de ce type; par exemple, les membres de ce qu'il a, ou comment elle est grande. Par conséquent, vous ne pouvez pas l'utiliser comme un membre de la valeur de votre structure, car le compilateur ne sais pas quelle taille pour le faire, ou si ses constructeurs et le destructeur sont publiques. D'autre part, vous êtes libre de faire quelque chose comme
send_wrapper *_p_sender;
car les pointeurs de structures sont toujours de la même taille. Mais vous ne serait pas encore en mesure d'accéder à ses fonctions de membre, etc.Oui, mais seulement pour les références et les pointeurs à un tel
struct
. Une fois que vous commencez à piquer à l'intérieur, telles que l'accès à un membre de cela, vous avez besoin de l'intégralité de la déclaration de lastruct
— sinon, comment le compilateur va connaître votre expéditeur a unsend()
fonction?