반복기를 사용하여 다른 클래스에서 메서드를 호출 할 때 "오류 : '->'의 기본 피연산자에 포인터 유형이 아닌 '***'가 있습니다."오류

마르코

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관