내가 C++에 비교적 새로운 해요, 나는이 목록 반복에 문제가있어 C#을 배경에서 오는 :순회 서브 클래스 오류의 목록
나는 개체 및 호출 목록을 통해 루프 하나 개의 방법이 각각을위한 업데이트 방법으로 위대한 작품입니다. 목록의 유형은 std::list<EngineComponent>
이며 engineComponents
입니다.
void Game::Update()
{
for (EngineComponent component: this->engineComponents)
{
component.Update();
}
}
는 또한 EngineComponent
의 서브 클래스 DrawableEngineComponent
라고합니다.
void Game::Draw()
{
for (DrawableEngineComponent component: this->engineComponents)
{
component.Draw();
}
}
이 " 'DrawableEngineComponent'에서 'EngineComponent'존재로부터 적절한 사용자 정의 변환"오류를 생성합니다 나는 비슷한 반복을 할 때
문제가 나타납니다. 이 구현이 C#에서 모두 훌륭하고 멋쟁이 였다는 것을 감안할 때 C++에서이 문제를 해결하는 최선의 방법이 무엇인지 잘 모르겠습니다.
내가 할 수있는 몇 가지 대안 방법을 생각할 수 있지만 수동으로 변환을 정의하지 않고도 C#과 유사한 방식으로 C++에 기능이 있는지 궁금합니다. 당신이 그 오류)
캐스팅 시도가 잠재적 인 슬라이싱 문제를 고함입니다. , 당신은 그것에 대해 더 자세히 알고 싶으면 [이 질문과 답변을 읽으십시오] (http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c/274634#274634)를 잘 할 수 있습니다 – WhozCraig
당신은 C#에서이 함수가 작동한다고 말하지만 그것이 사실 인지는 잘 모르겠습니다 :-) C#에서는 목록의 구성 요소 중 하나가 * Drawable이 아닌 경우 어떻게됩니까? 그것은 추락합니까? 또는 목록에서 해당 항목을 건너 뛸 수 있습니까? 이와 관련하여 당신이 기대하거나 바라는 행동을 명확히하십시오. –
@AaronMcDaid 네 말이 맞아. 그렇지 않아. 내가 이것을 썼을 때 나는 약간 혼란스러워했다. 그것은 C#에서 매우 쉽게 할 수 있습니다. 각 객체가 루프에 올 때 (한 줄의 코드로) 검사하면 내가 작성해야만했던 것입니다. 좋은 자리 :) –