类中c struct的范围变形问题

问题描述 投票:0回答:1

我正在尝试编写更大程序的套接字部分。我有一堂课,其中一切都在发生。问题是得到一个我不明白的范围(可能)错误。

我的头文件是:

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);
                                 ^

任何建议都会很棒,我无法从谷歌中得到任何东西。

c++ sockets scope
1个回答
0
投票

您的成员变量声明等同于

class myclass
{
    struct addrinfo;
    addrinfo* addressInfo;
};

它声明了类型myclass::addrinfo,而不是全局类型。

您可以在全局范围中转发声明类型:

struct addrinfo;

namespace aaa{
namespace bbb{
class myclass {
public:
  //...
  addrinfo* addressInfo; // No 'struct' here.
};
}
}

或者,如果类型已在全局范围内声明,则可以删除struct

© www.soinside.com 2019 - 2024. All rights reserved.