2011-01-10 4 views
1

У меня есть программа, которая отлично работает под VC++, но дает мне ошибку в GCC.Размер хранилища 'var' не известен

в log.h:

 
namespace logType { 
    enum Enum { 
     None = 0, 
     Info, 
     Warning, 
     Error, 
    }; 
    std::string Name[]; 
} 

в log.cpp:

 

std::string logType::Name[] = { 
    "None", 
    "Info", 
    "WARNING", 
    "ERROR" 
}; 

Это прекрасно работает, когда я компилирую log.cpp. Однако, если любой другой файл включает в себя log.h, что файл ошибки из:

error: storage size of ‘logType::Name’ isn't known

Я попытался указать размер массива для имени [] в одном или обоих файлов, но это только изменяет ошибка с повторной записью.

Как мне получить это сотрудничество под GCC?

+0

когда вы получаете сообщение об ошибке при связывании файлов * .o или при создании файла .o? – hhafez

+0

При создании файла .o. – Nairou

ответ

8

Добавить extern в объявление log.h вашего имени. Ваш символ появляется в двух местах.

+0

Да. Функции не нужны (хотя это и не повредит), но переменные, объявленные в заголовке, требуют extern. –

Смежные вопросы