Следующий MCVE выдает предупреждение, используя mingw-w64 4.9.2:
struct __declspec(dllimport) S
{
int foo() { return func(); }
int func();
void other_func();
};
inline int S::func() { return 1000; }
int main() {}
Предупреждение:
dt.cc:9:5: warning: 'int S::func()' redeclared without dllimport attribute
after being referenced with dll linkage
inline int S::func() { return 1000; }
^
Мой вопрос: о какой именно проблеме сообщается, и должен ли я что-либо с этим делать (например, подать отчет об ошибке)?
Предупреждение исчезнет, если я изменю int func();
на inline int func();
- не уверен, что это значит.
Общие сведения. Этот шаблон встречается во многих местах библиотеки C++ под названием POCO. У класса есть некоторые функции, тела которых находятся в DLL (например, other_func
здесь), и некоторые функции, тела которых находятся в заголовочном файле (например, func
здесь).
inline
она не экспортируется DLL. - person Cheers and hth. - Alf   schedule 18.03.2015inline
), таким образом, предположительно не экспортируя ее, либо заменил определениеinline
правильным в файле реализации для экспорта DLL. . Поскольку вы не контролируете код, но это широко используемая библиотека, возможно, просто отключите предупреждение на данный момент, и сообщите о проблеме. Однако я не вижу имени предупреждения. Как отключить безымянное предупреждение g++? - person Cheers and hth. - Alf   schedule 18.03.2015foo
,func
иother_func
так, как если бы они также были__declspec(dllimport)
, или это явно должно быть записано в каждую функцию декларация? Предупреждение предполагает, чтоfunc()
рассматривается какdllimport
до момента появления его определения (если удалить функциюfoo
, ошибка исчезнет). - person M.M   schedule 18.03.2015