У меня есть следующий фрагмент кода, который работает с компилятором gcc 4.3, но когда я скомпилировал с gcc 4.8, устранена ошибка символа (время компоновки)
//test.cc
ULONG CPULimit = 200;
// тест.ч
namespace ABC
{
class STAT
{
public:
static ULONG getCPULimit();
}
}
в том же самом файле test.h я определил встроенную функцию getCPULimit()
inline ULONG
ABC::STAT::getCPULimit()
{
extern ULONG CPULimit;
return CPULimit;
}
Приведенный выше код работал с компилятором 4.3, а в 4.8 возникала неразрешенная ошибка символа.
перемещение extern ULONG CPULimit за пределы функции будет работать, но при этом будет открыта глобальная переменная. теперь я обернул функцию с помощью extern "C", как это
extern "C"
{
inline ULONG
ABC::STAT::getCPULimit()
{
extern ULONG CPULimit;
return CPULimit;
}
}
и на удивление это сработало, 1) я не уверен, как это сработало, может ли кто-нибудь пролить свет? Это правильный способ сделать это?
2) что значит иметь два экстерна (один экстерн С и один экстерн)
ULONG
не тип - person Jonathan Wakely   schedule 18.03.2014ULONG
— этоtypedef unsigned long
в заголовках Windows. Я подозреваю, что вы обновили свойMinGW
сgcc 4.3
наgcc 4.8
и получили эту ошибку? - person lapk   schedule 18.03.2014