2013-05-02 2 views
1

미리 정의 된 값으로 맵을 만들고 다른 방법으로 처리하기 위해 다음 기본 파일을 전달했습니다. 주요 파일로 다음과 같습니다 경우 : setPorto가이컴파일 오류 C++ : 개체가없는 멤버 함수를 호출 할 수 없습니다.

void Porto::setPorto(const map<id,Porto>& _portoblock) { 
    //do stuffs 
}; 

(별도의 파일에) 다음 나는 오류 "의 오류 메시지가 표시했기 때문에 클래스에 정의되어

int main(){ 
    map<id,Porto> _portoInit; 

    id = 1; 

    Porto p; 
    p.val = 5; 

    _portoInit.insert(pair<id, Porto>(id, p)); 

    Porto::setPorto(_portoInit); 

    return 1; 
} 

는 : 할 수 없습니다 멤버 함수를 호출하십시오 ... " 이미 주 파일에 _portoInit의 객체를 선언하지 않았거나 잘못된 선언 방법입니까?

답변

2

당신은 실제 객체를 통해 메소드를 호출해야합니다 setPorto하지 않는 한

p.setPorto(_portoInit); 

static 방법, 코드가 유효하지 않습니다.

1

setPorto은 비 정적 멤버 함수이므로 Porto 인스턴스에서 호출해야합니다. 예를 들어 : 비 정적 멤버 함수는 T의 *를 입력합니다 (자격을 갖춘 가능 CV)의 암시 적 첫 번째 매개 변수를 취할 것을

p.setPorto(_portoInit); 

참고 있도록 이처럼 호출 할 수 :

Porto::setPorto(&p, _portoInit); 

두 경우 모두 멤버 함수를 호출 할 객체가 필요합니다. 이것은 컴파일러가 말하는 것입니다.

1

당신은

p.setPorto(_portoInit); 

은 "::"호출되는 함수는 포르투 인의 대상으로, 함수의 범위를 정의하고, 상기에서 암시 적 써야한다.

관련 문제