2011-05-12 4 views
0
A* a = new A(x,y); 
set<A> aset; 
aSet.insert(a); 

나는 이것을했다. 오류가 발생했습니다. 어떻게 수정해야합니까?C++ 질문. 컨테이너와 클래스의 인스턴스에 대해서

감사합니다.

+2

제발 제발 제발 : 오히려 인스턴스에 대한 포인터보다

A* a = new A(x,y); set<A*> aset; aSet.insert(a); 

또는 인스턴스를 생성 :

당신은 포인터를 저장에 설정을 변경해야 하나)보다 "오류가 발생했습니다." – Ben

+0

실제로 정확한 오류 메시지를 게시 한 경우 사람들이 이에 대응하기 시작하는 방법을 알 수 있습니다. "오류"는 "컴파일러가 오류 메시지를 표시합니다."에서 "전기 회사의 가이가 문을 두드려서 그리드를 배수했기 때문에 프로그램을 중단한다고 화가 나서 주장했습니다." –

+0

죄송합니다. 내 잘못입니다. 다음에 할거야. –

답변

7

ASET은하지 포인터의 A. 그러니

set<A*> aset; 

또는

aset.insert(*a); 

하기 위해, 세트하지만 나중에는 너무 많은 의미가 있다고 생각하지 않습니다.

+0

예, 도움이됩니다. 고맙습니다! –

+0

FWIW, 저는 전자가 너무 많은 의미를 가지지 않는다고 생각합니다. 포인터 모음은 고급 주제이며, 잘못 입력하는 방법을 제공합니다. 한 가지로, 당신의 집합은'<'연산자가 아닌 객체의 * 주소 *에 의해 정렬되고 중복 제거됩니다. 그게 네가 원하는 것이라면 괜찮지 만, 네가 원하는 것은 아닐거야. 나는 또한 질문자의 코드에서'delete '에 대한 호출이 조심스럽게 거의 없다는 것을 볼 수있다 -이 설정은 어떻게 정리 될 것인가? ;-) –

3

A에 대한 포인터를 세트에 삽입하려고하지만 세트는 A을 직접 취하도록 선언됩니다. 오류 메시지처럼 (자세한 컨텍스트를 제공

A a = A(x,y); 
set<A> aset; 
aSet.insert(a); 
관련 문제