我正在尝试编写更大程序的套接字部分。我有一堂课,其中一切都在发生。问题是得到一个我不明白的范围(可能)错误。
我的头文件是:
namespace aaa{
namespace bbb{
class myclass {
public:
myclass();
~myclass();
...
struct addrinfo* addressInfo;
};}}
我的析构函数是:
namespace aaa{
namespace bbb{
...
myclass::~myclass() {
if ( addressInfo != NULL)
freeaddrinfo(addressInfo);
if ( socketDescriptor > 0 )
close(socketDescriptor);
free(buffer);
}
...
}}
在尝试编译时,我收到一条错误说明:
error: cannot convert ‘aaa::bbb::addrinfo*’ to ‘addrinfo*’ for argument ‘1’ to ‘void freeaddrinfo(addrinfo*)’
freeaddrinfo(myclass::addressInfo);
^
任何建议都会很棒,我无法从谷歌中得到任何东西。
您的成员变量声明等同于
class myclass
{
struct addrinfo;
addrinfo* addressInfo;
};
它声明了类型myclass::addrinfo
,而不是全局类型。
您可以在全局范围中转发声明类型:
struct addrinfo;
namespace aaa{
namespace bbb{
class myclass {
public:
//...
addrinfo* addressInfo; // No 'struct' here.
};
}
}
或者,如果类型已在全局范围内声明,则可以删除struct
。