문제

나는 게임을하고 있으며 흥미로운 질문이 있습니다. 하나의 파일로 구현하고 싶은 게임 전체의 상수 값이 있습니다. 지금은 다음과 같은 것이 있습니다.

상수 .cpp

extern const int BEGINNING_HEALTH = 10;
extern const int BEGINNING_MANA = 5;

상수 .hpp

extern const int BEGINNING_HEALTH;
extern const int BEGINNING_MANA;

그런 다음 #include "constants.hpp"만 파일을 파일화하면 상수 중 하나를 템플릿 매개 변수로 사용해야 할 때까지 외부 연결 상수가 유효한 템플릿 매개 변수가 아니기 때문에 이것은 잘 작동했습니다. 제 질문은 이러한 상수를 구현하는 가장 좋은 방법은 무엇입니까? 단순히 상수를 헤더 파일에 넣으면 각 번역 장치에 정의 될 것입니다. 그리고 나는 매크로를 사용하고 싶지 않습니다.

감사

도움이 되었습니까?

해결책

제거하십시오 extern 그리고 당신은 설정됩니다.

이 코드는 모든 것이 "진정한 일정"이므로 내부 연결이 있기 때문에 헤더에서 완벽하게 잘 작동합니다.

const int BEGINNING_HEALTH = 10;
const int BEGINNING_MANA = 5;
const char BEGINNING_NAME[] = "Fred";
const char *const BEGINNING_NAME2 = "Barney";

이 코드는 각 줄에 외부 연결이 있기 때문에 헤더 파일에 안전하게 넣을 수 없습니다 (명시 적으로 또는 진정으로 일정하지 않기 때문에).

extern const int BEGINNING_HEALTH = 10;
extern const int BEGINNING_MANA = 5;
const char *BEGINNING_NAME = "Wilma";  // the characters are const, but the pointer isn't

다른 팁

열거는 어떻습니까?

상수 .hpp

  enum {
    BEGINNING_HEALTH = 10,
    BEGINNING_MANA = 5
  }

.hpp 파일에 "static const int"를 사용하고 .cpp 파일에 아무것도 넣지 않습니다 (물론 다른 코드를 제외하고).

네임 스페이스 사용 :

namespace GameBeginning {
    const int HEALTH = 10;
    const int MANA   = 5; 
};

그런 다음 u는 player.health = gamebeginning :: Health로 사용할 수 있습니다.

대부분의 컴파일러는 단순히 Const POD 값에 대한 공간을 할당하지 않습니다. 그들은 그들을 최적화하고 마치 마치 마치 마치 #defineD, 그렇지 않습니까?

간단한 일 :

#define BEGINNING_HEALTH 10

남자, 그 날이었다.
오 잠깐만 요 여전히 그렇습니다 날!

아마도 정적 클래스의 선을 따라 뭔가?

class CONSTANTS {
public:
static inline int getMana() { return 10;};
};

제목 질문에 대한 빠른 답변으로, 싱글 톤 패턴은 크로스 파일 상수를 정의하고 객체의 하나의 인스턴스 만 보장하는 최상의 C ++ 방법입니다.

템플릿 매개 변수 문제까지 값이 아닌 유형을 전달해야합니다. 귀하의 유형은 "int"입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top