Что вызывает следующее сообщение об ошибке: «Объявление друга ConnectHandler не соответствует ни одному объявлению в пространстве имен Crafter»? - PullRequest
0 голосов
/ 08 апреля 2019

Сегодня я работал над проектом, который ссылается на libcrafter (версия 0.2).Когда я строил этот проект с g ++ (5.4), проблем не было.

Я работаю над переходом на clang-8, поэтому я установил CC и CXX на clang, clang ++ соответственно, запустил cmake и начал сборку заново.

Это привело к титульномусообщение об ошибке:

friend declaration of 'ConnectHandler' does not match any declaration in the namespace 'Crafter'
/* Rest of the error message, including the following declaration
 * friend void* Crafter::ConnectHandler(void *thread_arg), the line and
 * column number, filename etc.
 */

Я также получил ту же ошибку для другой функции в коде.Ошибки были указаны в crafter / Utils / TCPConnection.h (строка 247, 248).

При проверке файла заголовка я нашел объявления друзей:

namespace Crafter
{
    class TCPBuffer
    {
        // Stuff
    };

    class TCPConnection
    {
        // Other declarations etc.
        friend void* Crafter::ConnectHandler(void *thread_arg);
        friend void Crafter::PckHand(Crafter::Packet *sniff_packet, void *user);
        // Class declaration continues
    };
}

И в TCPConnectionФайл .cpp, я нашел:

namespace Crafter
{
    void* ConnectHandler(void *thread_arg);
    void PckHand(Packet *sniff_packet, void *user);
}

// Intervening code

void Crafter::PckHand(Crafter::Packet *sniff_packet, void *user
{
    // Do stuff
}

void* Crafter::ConnectHandler(void *thread_arg)
{
    // Do stuff
}

Это выглядело нормально для меня, и моя сборка на основе g ++ не вызывала нареканий.Я попытался воспроизвести это с минимальным рабочим примером, но до сих пор не смог добиться успеха: компилируется без ошибок.

Добавлено, что эта ошибка возникла не при сборке самого crafter, а при создании другогокусок кода, который ссылается на него.В частности, filename.cc включал файл TCPConnection.h из моего проекта, включающий каталог, и именно на это мне указал компилятор.

Я был бы очень признателен за любую помощь в понимании этой ошибки и ее устранении.

...