2017-12-06 7 views
0

question을 보았지만 거기에 제공된 솔루션으로 문제가 해결되지 않았습니다. 비록이 오류C++ 11 : 배열 바운드가 정수가 상수가 아니기 전에 토큰

num_instances 제기 //

static int num_instances; 
std::vector<SomeClass::FunctionWithinTheClass> *mem[num_instances]; 

SomeClass::FunctionWithinTheClass *mem[num_instances];가 구성 파일을 판독함으로써 얻어진다.

내가 오류는 다음과 같습니다 array bound is not an integer constant before ‘]’ token

num_instances이 컴파일시에 고정되어 있기 때문에이 이상하다.

+0

으로 변경하십시오. 컴파일 할 때 설정 파일을 읽는 중입니까? – Mat

+0

아니요, 구성 파일은 런타임에 읽습니다. – tandem

+0

그런 다음 값은 런타임에 결정됩니다. 그렇지 않습니까? – Mat

답변

1

the value num_instances is obtained by reading a configuration file

num_instances 수단

... the config file is read at runtime

는 값 런타임에서 결정되는 변수 이다.

This is strange because the value num_instances is fixed at compile time

아니요, 당신 자신이 모순됩니다.

런타임에 config에서로드되는 경우 컴파일시 알 수 없습니다. 컴파일 타임에 알려졌다면 런타임에 config에서로드하지 않을 것입니다.


당신이 컴파일시에 num_instances를 해결할 수없는 경우, 배열은 사용하는 잘못된 일이다. 그냥

// like an array whose size can be set at runtime ... 
std::vector<std::vector<SomeClass::FunctionWithinTheClass>> mem; 

void configure() { 
    size_t num_instances = loadNumInstancesFromConfig(); 
    mem.resize(num_instances); 
} 
+0

왜 그것은'std :: vector tandem

+0

내가 성취하려고 시도한 것은 무엇이라고 말했습니까? 무엇이 의미가 있을까요?템플릿 매개 변수 목록에서'<...>'대괄호를 사용하면 어떻게 읽습니까? – Useless

+0

필자는 그것을 다시 읽고 더 잘 이해하여 다음과 같은 새로운 오류가 발생했습니다. '포인터 크기가 ... 인 멤버 크기 조정 요청 (어쩌면 ->' – tandem

0

값이 고정되어 있어도 컴파일 타임 상수가 아닙니다. 동적 크기의 컨테이너를 원한다면 stl 컨테이너를 사용 하시겠습니까?

1

아마도 컴파일 타임에는 고정되어 있지만 "정수 상수"는 전문 용어이고 static int 변수는 이러한 요구 사항을 충족하지 못합니다.

대신 static const int을 사용하십시오. 이 작품 :

static const int num_instances = 5; 

그러나, 당신은 num_instances 구성 파일에서 읽도록 언급 ...이 나에게 일정한처럼 원격으로 소리가 나지 않는다. 이 경우 std::vector 또는 다른 동적 크기의 배열을 사용해야합니다.