안녕하세요,이 질문에 나는 컴파일 순서는 중요하지 않지만 정말 이상한 상황이 있습니다.C++ Makefile 컴파일 순서
나는 그들과 같이 파일 CCSizePolicy.cpp 에서 몇 가지 전역 변수가 있습니다
const CCSizePolicy CCSizePolicyWrapContent (Const::WRAP_CONTENT);
const CCSizePolicy CCSizePolicyMatchContent (Const::MATCH_PARENT);
const CCSizePolicy CCSizePolicyZero (Policy::SP, 0);
헤더에
CCLayoutParams.hextern const CCLayoutParams CCLayoutParamsMatchMatch;
extern const CCLayoutParams CCLayoutParamsWrapWrap;
extern const CCLayoutParams CCLayoutParamsMatchWrap;
extern const CCLayoutParams CCLayoutParamsWrapMatch;
및 CCLayoutParams에서 또한
enum Const
{
WRAP_CONTENT = -1, MATCH_PARENT = -2
};
extern const CCSizePolicy CCSizePolicyWrapContent;
extern const CCSizePolicy CCSizePolicyMatchContent;
extern const CCSizePolicy CCSizePolicyZero;
.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을 얻습니다) 무슨 일이 벌어지고 있습니까? 내가 이름으로 내 소스 파일을 정렬하기 때문에 내 전체 프로젝트 내가 왜 모르는 도청되는
GCC 버전 4.6.3 (우분투/리나 4.6.3-1ubuntu5)로 리눅스를 사용
임 ??!? !
.h 파일에 넣는 것이 좋은 해결책입니까? const CCLinearLayoutParams와 같은 것 CCLinearLayoutParamsMatchMatch ( \t CCSizePolicyMatchContent, CCSizePolicyMatchContent); 정의를 .cpp에서 h로 옮기고 (extern을 사용하는) 선언을 삭제합니다. –
아니요,하지만 Steve Jessop이 제안한 것처럼'constexpr'을 사용한다면 아마도. –