나는 다음과 같은 클래스가 있습니다 컨테이너, 요소 다음 예 요소에서을 상속 클래스의 커플. 컨테이너 배열에 요소를 추가 할 때 버튼, 입력, 등등 ...다형성과 포인터의 배열 (C++)
내가 문제가() 내 주요는 다음과 같습니다
Container c;
c.Add(Button(...));
c.Add(Input(...));
는 여기서 "..."일부 생성자입니다 매개 변수.
Element ** elements;
하지만 데 문제가 Add 메서드를 구현하는 방법이다, 내가 기대했다 무언가 : 컨테이너 클래스에서
는 그 컨테이너에 속하는 모든 요소를 저장하는 포인터의 배열을 다음과 같이 작동합니다 :void Add(const CControl & newElement){
elements[elemCnt++] = &newElement;
}
(요소 배열을 할당 : 요소 = 새로운 요소 * [100]) 나는이 컴파일 오류를 얻고있다 그러나
:
main.cpp: In member function ‘Container& Container::Add(const Element&)’:
main.cpp:138:23: error: invalid conversion from ‘const Element*’ to ‘Element*’
const 한정자를 제거하면 적절한 후보가 없다는 컴파일 오류가 발생합니다.
문제는 C++에서 다형성과 상속에 익숙하지 않기 때문에 잘못된 방향으로 진행될 수 있습니다. 이것에 대한 최선의 접근 방법은 무엇입니까?
추신 : 주된 방법은 똑같아 야하며, 벡터 나 STL을 제안하지 않아야합니다. 당신이 정말로 호출 코드를 변경할 수 없다면 당신은 어떻게 든 임시의 복사본을 생성 할 필요가
void Add(CControl * newElement){
elements[elemCnt++] = newElement;
}
다음이
c.Add(new Button(...));
c.Add(new Input(...));
처럼 호출 할 수
STL 사용시 문제점은 무엇입니까? 왜 그것을 사용하고 싶지 않아 ??? 인생을 훨씬 쉽게 만들어줍니다. –
여기에서 하나의 중대한 실수를 저지른 것은 _temporary_ 변수의 주소를 사용하고 멀리 저장하는 것입니다. Add에 대한 인수는 일시적이며 호출이 끝나면 객체가 삭제됩니다. 게다가, 나는 TonyTheLion에 동의한다. 왜 아주 좋은 표준 컨테이너를 사용하지 않을까? –
아마도 그럴 것입니다. 요소를 복사하고 동적으로 할당 된 복사본의 주소를 저장해야합니다. STL을 사용하지 않고 환경에서 테스트 한 결과이므로 STL을 사용할 수 없습니다. – Smaug