170 похожих чатов

Парни, такой вопрос. Вот такое сделал в .h файле, чтобы

для этого метода в .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();
}

18 ответов

22 просмотра

Если уж "хакать" приватность в тестах (что не рекомендуется), то я бы порекомендовал завести макрос PRIVATE_UNLESS_TESTED, который будет раскрываться в private или public. Примерно так сделали здесь

Gabriel- Автор вопроса
Alexander Karaev
Если уж "хакать" приватность в тестах (что не реко...

О, спасибо, щас чекну. У меня всё ещё остаётся вопрос, почему оно не работает в моём случае? ;(

Gabriel- Автор вопроса
Alexander Karaev
А без макросов работает?

class Client { uint32_t GetClSessionId(void) const; }; Вот так работает.

потому что класс по умолчанию private члены имеет

Alexander Karaev
Если уж "хакать" приватность в тестах (что не реко...

к слову, изменения 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)

Gabriel- Автор вопроса
Kelbon
потому что класс по умолчанию private члены имеет

Да, там я провтыкал первый макрос. Там protected.

🙈 Не надо так делать с классами!

Gabriel
;(

Ты понимаешь вообще, что ты делаешь? Это ж UB в чистом виде!

ЗОЧЕМ

А почему не через #else?

Gabriel
Да, там я провтыкал первый макрос. Там protected.

Смысл так делать? вот протестировал ты тестовый вариант класса... Далаешь релиз... И это — ДРУГОЙ вариант класса! Его надо ЗАНОВО тестировать!

Vlad
норм наброс

Царя знаешь?

vile
Царя знаешь?

Всё, хватит уже. Царя свергли более чем 100 лет назад.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
3
Карта сайта