嗨在这个问题中,我读到编译顺序并不重要,但我真的很奇怪的情况。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 ...
秩序生成文件看起来是这样的:
src/view/layout/CCLayoutParams.cpp\
...
src/view/CCSizePolicy.cpp\
当我将其更改为
src/view/CCSizePolicy.cpp\
src/view/layout/CCLayoutParams.cpp\
...
一切开始工作(我得到-1 -1)发生了什么事?
进出口使用的Linux使用gcc版本4.6.3(Ubuntu的/ Linaro的4.6.3-1ubuntu5)
我的整个项目窃听我不知道为什么,因为我的名字我的源文件进行排序?!? !
将它们放入.h文件是不错的解决方案吗?类似于const CCLinearLayoutParams CCLinearLayoutParamsMatchMatch( \t CCSizePolicyMatchContent,CCSizePolicyMatchContent); 我将.cpp中的定义移动到h并删除了声明(使用extern) –
不,但如果您按照Steve Jessop的建议使用'constexpr',也许。 –