Сегодня я работал над проектом, который ссылается на 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 из моего проекта, включающий каталог, и именно на это мне указал компилятор.
Я был бы очень признателен за любую помощь в понимании этой ошибки и ее устранении.