Size: a a a

2020 April 21

A

AlexWhite in pro.cxx
Проект многофайловый.
Использую две переменные в одном из header (этот же хед. Используется далее ещё в одном хед., а он в свою очередь уже в основном cpp файле)файлов. Ранее они нигде не были определённы кроме этого файла.
extern int Width = GetSystemMetrics(SM_CXSCREEN);
extern int Height = GetSystemMetrics(SM_CYSCREEN);
Поставил на них extern, чтобы можно было использовать в других header файлах. В итоге компилятор все равно выдает ошибку
источник

A

AlexWhite in pro.cxx
Неразрешённый внешний символ - ошибка
источник

DF

Dollar Føølish in pro.cxx
Инлайн вместо экстерна ебаш
источник

DF

Dollar Føølish in pro.cxx
При экстерне только декларейшн может быть
источник

II

Igor Ivanov in pro.cxx
вопрос наверное больше про линукс, но тем неменее
коллега влетел в беду с расхождением glibc между библиотекой и приложением:
libcrypto.so: неопределённая ссылка на «getauxval@GLIBC_2.16»
libcrypto.so: неопределённая ссылка на «clock_gettime@GLIBC_2.17»

смотрю через readelf -Wa на эту же либу в своём дистре, и вижу ещё более интересные данные:
   125: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND openlog@GLIBC_2.2.5 (16)
  126: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __memset_chk@GLIBC_2.3.4 (15)

вопрос: как это блин работает? какова связь между именами функций и указанными у них версиями glibc?
источник

АК

Александр Караев in pro.cxx
Igor Ivanov
вопрос наверное больше про линукс, но тем неменее
коллега влетел в беду с расхождением glibc между библиотекой и приложением:
libcrypto.so: неопределённая ссылка на «getauxval@GLIBC_2.16»
libcrypto.so: неопределённая ссылка на «clock_gettime@GLIBC_2.17»

смотрю через readelf -Wa на эту же либу в своём дистре, и вижу ещё более интересные данные:
   125: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND openlog@GLIBC_2.2.5 (16)
  126: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __memset_chk@GLIBC_2.3.4 (15)

вопрос: как это блин работает? какова связь между именами функций и указанными у них версиями glibc?
у каждой функции в glibc есть версия, начиная с которой она появилась. видимо, коллега при сборке юзал функции из glibc 2.16+, а запускает на тачке, где glibc древняя
как-то так
источник

ПК

Побитый Кирпич in pro.cxx
AlexWhite
Проект многофайловый.
Использую две переменные в одном из header (этот же хед. Используется далее ещё в одном хед., а он в свою очередь уже в основном cpp файле)файлов. Ранее они нигде не были определённы кроме этого файла.
extern int Width = GetSystemMetrics(SM_CXSCREEN);
extern int Height = GetSystemMetrics(SM_CYSCREEN);
Поставил на них extern, чтобы можно было использовать в других header файлах. В итоге компилятор все равно выдает ошибку
extern + = можно только в cpp писать
источник

A

AlexWhite in pro.cxx
А вот если есть функции у которых тип данных DWORD, string их так же нужно объявлять в header ?
Допустим:
DWORD CIndex(DWORD value)
{} в cpp
в .h
inline DWORD CIndex(DWORD value);
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
AlexWhite
А вот если есть функции у которых тип данных DWORD, string их так же нужно объявлять в header ?
Допустим:
DWORD CIndex(DWORD value)
{} в cpp
в .h
inline DWORD CIndex(DWORD value);
Это не зависит от типа данных
источник

A

AlexWhite in pro.cxx
Либо я криво раскидал и подключил header'ы, но все равно идут ошибки на неразрешенный внешний символ
https://imgur.com/a/6OeThRa
источник

ПК

Побитый Кирпич in pro.cxx
AlexWhite
А вот если есть функции у которых тип данных DWORD, string их так же нужно объявлять в header ?
Допустим:
DWORD CIndex(DWORD value)
{} в cpp
в .h
inline DWORD CIndex(DWORD value);
Такие вопросы в @supapro
источник

nn

no name in pro.cxx
Alex
мне тоже это было странно, но я такое то ли читал, то ли слышал от кого-то. Сам не проверял, но запомнил.
видал такое вроде в бусте где в делетере для проверки типа было "char data[sizeof(T)]". давно,  до 11 года.
источник

DF

Dollar Føølish in pro.cxx
Я думал свинья по сайзофу это что то из разряда тривиальных знаний кек
источник

i⛺

ivan (ratijas) ⛺ in pro.cxx
допустим, есть класс QEvent с единственным конструктором: QEvent(QEvent::Type), где QEvent::Type это обыкновенный enum, даже не класс, из пары сотен числовых вариантов.

допустим также, что объявлена константа static constexpr int MyEventTypeInt = 513; (enum был задуман как расширяемый разработчиками, использующими фреймворк).

требуется переменная e с типом QEvent.

внимание, вопрос на барабане: какие из следующих кусков кода компилируются в требуемое?

1a.
QEvent e(QEvent::Type(513));

1b.
QEvent e(QEvent::Type(MyEventTypeInt));

2a.
QEvent e((QEvent::Type(MyEventTypeInt)));

2b.
QEvent e{QEvent::Type(MyEventTypeInt)};

3a.
QEvent e(513);

3b.
QEvent e(MyEventTypeInt);

4.
QEvent e = QEvent(QEvent::Type(MyEventTypeInt));
источник

i⛺

ivan (ratijas) ⛺ in pro.cxx
какие из кусков кода компилируются в требуемое?

1a - 4
👍👍👍👍👍 66%

1b - 0
▫ 0%

2a - 3
👍👍👍👍 50%

2b - 6
👍👍👍👍👍👍👍👍 100%

3a - 1
👍 16%

3b - 1
👍 16%

4 - 4
👍👍👍👍👍 66%

👥 6 people voted so far.
источник

N

Neargye in pro.cxx
ivan (ratijas) ⛺
допустим, есть класс QEvent с единственным конструктором: QEvent(QEvent::Type), где QEvent::Type это обыкновенный enum, даже не класс, из пары сотен числовых вариантов.

допустим также, что объявлена константа static constexpr int MyEventTypeInt = 513; (enum был задуман как расширяемый разработчиками, использующими фреймворк).

требуется переменная e с типом QEvent.

внимание, вопрос на барабане: какие из следующих кусков кода компилируются в требуемое?

1a.
QEvent e(QEvent::Type(513));

1b.
QEvent e(QEvent::Type(MyEventTypeInt));

2a.
QEvent e((QEvent::Type(MyEventTypeInt)));

2b.
QEvent e{QEvent::Type(MyEventTypeInt)};

3a.
QEvent e(513);

3b.
QEvent e(MyEventTypeInt);

4.
QEvent e = QEvent(QEvent::Type(MyEventTypeInt));
Стандарт какой?
источник

АК

Александр Караев in pro.cxx
ivan (ratijas) ⛺
допустим, есть класс QEvent с единственным конструктором: QEvent(QEvent::Type), где QEvent::Type это обыкновенный enum, даже не класс, из пары сотен числовых вариантов.

допустим также, что объявлена константа static constexpr int MyEventTypeInt = 513; (enum был задуман как расширяемый разработчиками, использующими фреймворк).

требуется переменная e с типом QEvent.

внимание, вопрос на барабане: какие из следующих кусков кода компилируются в требуемое?

1a.
QEvent e(QEvent::Type(513));

1b.
QEvent e(QEvent::Type(MyEventTypeInt));

2a.
QEvent e((QEvent::Type(MyEventTypeInt)));

2b.
QEvent e{QEvent::Type(MyEventTypeInt)};

3a.
QEvent e(513);

3b.
QEvent e(MyEventTypeInt);

4.
QEvent e = QEvent(QEvent::Type(MyEventTypeInt));
не enum class? скомпилятся все, не скомпилился бы только QEvent{ 513 } / QEvent{ MyEventTypeInt } (которых нет в ответах)
источник

i⛺

ivan (ratijas) ⛺ in pro.cxx
Neargye
Стандарт какой?
11 наверное.  я не понимаю в деталях, как этот пакет работает:
https://docs.rs/cpp/
источник

i⛺

ivan (ratijas) ⛺ in pro.cxx
Александр Караев
не enum class? скомпилятся все, не скомпилился бы только QEvent{ 513 } / QEvent{ MyEventTypeInt } (которых нет в ответах)
не все.  там примерно 50/50.
источник

A

Alex in pro.cxx
Александр Караев
не enum class? скомпилятся все, не скомпилился бы только QEvent{ 513 } / QEvent{ MyEventTypeInt } (которых нет в ответах)
3а и 3b не скомпилятся, и судя по двойным скобкам, там где-то попахивает the most vexing parse)
источник