좋아, xml 파일을 읽고 new를 사용하여 컨트롤을 만들고이를 Window
:C++/STL - std :: map에서 클래스 포인터 인스턴스에 액세스 할 때 프로그램이 충돌 함
std::map<const char*, Button*> Buttons;
std::map<const char*, TextBox*> TextBoxes;
std::map<const char*, CheckBox*> CheckBoxes;
Button, TextBox 및 CheckBox 클래스는 CreateWindowEx의 홈 메이드 래퍼입니다. 여기
void Window::LoadFromXml(const char* fileName)
{
XMLNode root = XMLNode::openFileHelper(fileName, "Window");
for(int i = 0; i < root.nChildNode("Button"); i++)
{
Buttons.insert(std::pair<const char*, Button*>(root.getChildNode("Button", i).getAttribute("Name"), new Button));
Buttons[root.getChildNode("Button", i).getAttribute("Name")]->Init(_handle);
}
for(int i = 0; i < root.nChildNode("CheckBox"); i++)
{
CheckBoxes.insert(std::pair<const char*, CheckBox*>(root.getChildNode("Button", i).getAttribute("CheckBox"), new CheckBox));
CheckBoxes[root.getChildNode("CheckBox", i).getAttribute("Name")]->Init(_handle);
}
for(int i = 0; i < root.nChildNode("TextBox"); i++)
{
TextBoxes.insert(std::pair<const char*, TextBox*>(root.getChildNode("TextBox", i).getAttribute("Name"), new TextBox));
TextBoxes[root.getChildNode("TextBox", i).getAttribute("Name")]->Init(_handle);
}
}
XML 파일입니다 : 여기
는지도를 채우는 기능입니다 내가 예를 들어,
TextBoxes["Email"]->Width(10);
, 프로그램에 액세스하려고하면
<Window>
<TextBox Name="Email" />
<TextBox Name="Password" />
<CheckBox Name="SaveEmail" />
<CheckBox Name="SavePassword" />
<Button Name="Login" />
</Window>
문제이며, 컴파일은 잘되지만, 시작할 때 충돌이납니다.
나는 파생 클래스에서 호출 해요 :
root.getChildNode("Button", i).getAttribute("CheckBox")
반환 등의 작업을 수행 할 것을
class LoginWindow : public Window
{
public:
bool OnInit(void) // This function is called by Window after CreateWindowEx and a hwnd == NULL check
{
this->LoadFromXml("xml\\LoginWindow.xml"); // the file path is right
this->TextBoxes["Email"]->Width(10); // Crash, if I remove this it works and all the controls are there
}
}
감사합니다. jpalecek, btw가 초급, 중급 또는 고급 질문 이었습니까? – Martin