Object
연관 배열 내에서 이름 으로 유형의 개체를 검색하는 메서드를 구현하고 있습니다. 그런 다음 display
클래스 내에 정의 된 메서드 를 사용하여 해당 요소를 표시합니다 Object
. 이 방법은 다음과 같이 구현됩니다.
//Method SearchObject in class Gestion
#include "object.h"
void Gestion::SearchObject(string nameobj) const{
stringstream ss;
auto it = objectname.find(nameobj);
if (it == objectname.end())
cout << "Not found!" << endl;
else
(*it)->display(ss); //Error reported in this line
cout << ss.str() << endl;
}
그럼에도 불구하고 컴파일 할 때 다음 오류가 발생합니다.
error: base operand of ‘->’ has non-pointer type ‘const std::pair<const std::basic_string<char>, std::shared_ptr<Object> >’
(*it)->display(ss);
이 메서드 display
는 클래스 내에서 선언 Object
되었으며 다른 클래스에서 호출하여 이미 테스트했습니다. 클래스 헤더 Gestion
에서 변수는 다음과 같이 선언됩니다.
//File gestion.h
typedef std::shared_ptr<Object> ObjPtr;
typedef map<string, ObjPtr> Objectmap;
class Gestion {
private:
Objectmap objectname;
public:
Gestion(Objectmap objectname);
virtual ~Gestion() {}
virtual void SearchObject(string nameobj) const;
};
display
구현중인이 새 메서드 내 에서 메서드를 어떻게 사용할 수 있습니까?
반복자는 포인터를 모델로하므로 역 참조 연산자 *
를 사용 하거나 포인터-구조체 액세스 연산자 ->
를 사용할 수 있습니다.
그러나 포인터 대 구조체 액세스 연산자 ->
는 이미 역 참조를 수행하고 있으므로 둘 다 결합 할 수 없습니다.
이렇게 하나 it->display(ss)
, 또는 (*it).display(ss)
.
반복자가 멤버가 포인터 std::pair
인 을 "가리 키기" second
때문에 or , like or , or or를 사용하여 역 참조해야 하기 때문에 그것은 거짓말 입니다.*
->
it->second->display(ss)
(*it).second->display(ss)
(*it->second).display(ss)
(*(*it).second).display(ss)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다