나는 간단한 반복 구조체 인 Recursive
을 가지고 있으며, 프로그램에 필요한 값으로 초기화 된 const 배열을 갖고 싶습니다. 그런 다음 IterateAux
이라는 간단한 반복자 함수를 사용하고이를 main
이라고합니다. 지금까지의 코드를 봐 :중첩 배열을 재귀 구조로 정의하기
#include <iostream>
#include <string>
struct Recursive
{
std::string data;
Recursive* Children;
};
void IterateAux(Recursive* Item)
{
int i = -1;
while (Item[++i].data != "")
{
std::cout << Item[i].data << "\n";
if (Item[i].Children)
IterateAux(Item[i].Children);
}
}
int main()
{
IterateAux((Recursive*)Parent);
return 0;
}
을 지금이처럼 내 const를 배열이있는 경우 작동 :
const Recursive Children[] = {
{"Child1", NULL},
{"Child2", NULL},
{"", NULL}
};
const Recursive Parent[] = {
{"Parent1", NULL},
{"Parent2", NULL},
{"Parent3", Children },
{"", NULL}
};
그러나 다음과 같은 중첩 된 양식을하지 않습니다 :
const Recursive Parent[] = {
{"Parent1", NULL},
{"Parent2", NULL},
{"Parent3", (Recursive[])
{
{"Child1",NULL},
{"Child2",NULL},
{"", NULL}
}
},
{"", NULL}
};
과 그 질문은 왜? 어떻게 작동시킬 수 있습니까?
내 조사에서 처음에는 .children
포인터가 유효하지 않을 수 있다고 생각했지만 int
데이터 대신 시도했을 때는 std::string
으로 완벽하게 작동했습니다.
std::string
데이터 GDB가 메시지 During startup program exited with code 0xc0000135.
과 충돌하여 프로그램을 디버깅 할 수 없습니다. 어쩌면 배열 초기화 코드가 어딘가에서 엉망이되고있다.
GCC 4.6에서이 모든 것을 시도했다.
'../sta/recurstruct.cpp:30:3 : 경고 : ISO-C++은 복합 리터럴을 금지합니다. ' – CapelliC
그건 C++ 언어의 한계에 불과합니다. 몇 가지 템플릿 메타 프로그래밍을 사용하여 문제를 해결할 수 있습니다. –
"경고"없이 컴파일 된 후 Linux에서 g ++ 4.6.3을 사용하기 위해 "const"를 제거해야했습니다. – stark