Привет, в этом вопросе я читал, что порядок компиляции не имеет значения, но у меня действительно странная ситуация.C++ Makefile порядок компиляции
У меня есть несколько глобальных переменных в файле CCSizePolicy.cpp Они выглядят так:
const CCSizePolicy CCSizePolicyWrapContent (Const::WRAP_CONTENT);
const CCSizePolicy CCSizePolicyMatchContent (Const::MATCH_PARENT);
const CCSizePolicy CCSizePolicyZero (Policy::SP, 0);
в заголовке
enum Const
{
WRAP_CONTENT = -1, MATCH_PARENT = -2
};
extern const CCSizePolicy CCSizePolicyWrapContent;
extern const CCSizePolicy CCSizePolicyMatchContent;
extern const CCSizePolicy CCSizePolicyZero;
Также в CCLayoutParams.h
extern const CCLayoutParams CCLayoutParamsMatchMatch;
extern const CCLayoutParams CCLayoutParamsWrapWrap;
extern const CCLayoutParams CCLayoutParamsMatchWrap;
extern const CCLayoutParams CCLayoutParamsWrapMatch;
и CCLayoutParams .cpp
const CCLayoutParams CCLayoutParamsMatchMatch (CCSizePolicyMatchContent,
CCSizePolicyMatchContent);
const CCLayoutParams CCLayoutParamsWrapWrap (CCSizePolicyWrapContent,
CCSizePolicyWrapContent);
const CCLayoutParams CCLayoutParamsMatchWrap (CCSizePolicyMatchContent,
CCSizePolicyWrapContent);
const CCLayoutParams CCLayoutParamsWrapMatch (CCSizePolicyWrapContent,
CCSizePolicyMatchContent);
Так что, когда я использую их в своей программе я называю CCLayoutParamsWrapWrap.getWidth() и CCLayoutParamsWrapWrap.getHeight()
Это должен вывести меня -1 -1 НО у меня есть 0 0 ...
порядок в Makefile выглядит следующим образом:
src/view/layout/CCLayoutParams.cpp\
...
src/view/CCSizePolicy.cpp\
, когда я изменить его на
src/view/CCSizePolicy.cpp\
src/view/layout/CCLayoutParams.cpp\
...
Все начинает работать (я получаю -1 -1), что происходит?
Im используя Linux с GCC версии 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
Весь мой проект прослушивается я не знаю, почему, потому что я сортировать мои исходные файлы по имени ??!? !
Это хорошее решение, чтобы поместить их в файл .h? что-то вроде const CCLinearLayoutParams CCLinearLayoutParamsMatchMatch ( \t CCSizePolicyMatchContent, CCSizePolicyMatchContent); Перемещение определения с .cpp на h и удаление объявления (с extern) –
Нет, но если вы используете 'constexpr', как полагает Стив Джессоп, возможно. –