для этого метода в .cpp всегда нашлось определение. Но в .cpp оно не хочет видеть реализацию этого метода и пишет:
error LNK2019: unresolved external symbol "protected: unsigned int
Как такое можно поправить? Вот сам код:
.h
class Client
{
#ifdef ENABLE_TEST_FUNCTIONALITY
protected:
uint32_t GetClSessionId(void) const;
#endif
#ifndef ENABLE_TEST_FUNCTIONALITY
private:
uint32_t GetClSessionId(void) const;
#endif
};
.cpp
uint32_t Client::GetClientSessionId(void) const
{
return ClientSession->GetID();
}
Если уж "хакать" приватность в тестах (что не рекомендуется), то я бы порекомендовал завести макрос PRIVATE_UNLESS_TESTED, который будет раскрываться в private или public. Примерно так сделали здесь
О, спасибо, щас чекну. У меня всё ещё остаётся вопрос, почему оно не работает в моём случае? ;(
А без макросов работает?
class Client { uint32_t GetClSessionId(void) const; }; Вот так работает.
потому что класс по умолчанию private члены имеет
к слову, изменения private на public может повлечь изменение порядка расположения членов в лейауте: Any number of access specifiers may appear within a class, in any order. Member access specifiers may affect class layout: the addresses of non-static data members are only guaranteed to increase in order of declaration for the members not separated by an access specifier (until C++11)with the same access (since C++11). For StandardLayoutType, all non-static data members must have the same access. (since C++11)
Да, там я провтыкал первый макрос. Там protected.
🙈 Не надо так делать с классами!
Ты понимаешь вообще, что ты делаешь? Это ж UB в чистом виде!
UB не существует
ЗОЧЕМ
А почему не через #else?
норм наброс
Смысл так делать? вот протестировал ты тестовый вариант класса... Далаешь релиз... И это — ДРУГОЙ вариант класса! Его надо ЗАНОВО тестировать!
Царя знаешь?
Всё, хватит уже. Царя свергли более чем 100 лет назад.
Новый родился :(
Обсуждают сегодня