Проблема крафта области с c struct в классе - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь написать сокетную часть большей программы.У меня есть класс, в котором все происходит.Проблема в том, что я получаю ошибку области видимости (вероятно), которую я не понимаю.

Мой заголовочный файл:

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

Любые предложения были бы хорошими, я ничего не могу получить от Google.

1 Ответ

0 голосов
/ 19 сентября 2018

Объявление вашей переменной-члена эквивалентно

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

, в котором объявлен тип myclass::addrinfo, а не глобальный тип.

Вы можете заранее объявить тип в глобальной области видимости:

struct addrinfo;

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

или, если тип уже объявлен в глобальной области видимости, вы можете просто удалить struct.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...