2013-07-16 3 views
0

동일한 클래스의 다른 멤버 함수에 대한 기본 매개 변수를 가져 오기 위해 클래스 멤버를 호출하려고합니다. 여기가 내가 뭐하는 거지입니다 :동일한 클래스의 다른 멤버 함수에 대한 기본 매개 변수를 가져 오기 위해 클래스 멤버 호출

class y { 
    virtual vector<int> getLabels(); 
} 

class x: public y { 
    virtual vector<int> getLabels(); 
    listGraph getPlanarGraph(const vector<int> &nodeSe=getLabels()); //want to achieve this. Compiler won't agree 
}; 

아무것도 제공하지 않으면 obj 대응 유형 인 obj.getPlanarGraph()로, 나는이 에서 라벨의 모든 설정의 목록을 싶어했다. 나는 이것을 위해 다음과 같은 쉬운 래퍼를 작성할 수 있다는 것을 알고있다. (끝 부분을 보자.) 에 더 많은 관심이 있는데 왜이 허용되지 않는다. 위의 선언에서 컴파일 오류는 cannot call member function ‘virtual std::vector<int> baseGraph::getLabels() const’ without object입니다.

this 인수를 제공하면 오류는 ‘this’ may not be used in this context입니다.

class x: public y { 
    virtual vector<int> getLabels(); 
    listGraph getPlanarGraph(const vector<int> &nodeSe=this->getLabels()); //error here. 
}; 

는 해결 나는의 생각 : 메소드가 호출 될 때, this가 어느 클래스 인스턴스를하는 방법을 호출하기 위해 참조하기 때문에

class x: public y { 
    virtual vector<int> getLabels(); 
    listGraph getPlanarGraph(const vector<int> &nodeSet); //No. 2 
    listGraph getPlanarGraph(); //define the function accordingly and call a 'No. 2' from inside. 
}; 
+0

불가능합니다. 해결 방법은 여기에 한해서만 가능합니다. –

+0

@IwanAucamp 좋습니다. 그러나 이것이 왜 불가능한가? 이런 종류의 설정이 허용되는 경우 어떤 문제가 발생할 수 있습니까? –

+0

은 C++ 03/[class.this]/1; 'this'는 비 정적 멤버 함수 body에서만 정의됩니다. 멤버는 객체 없이는 사용할 수 없습니다. 따라서 함수 선언에서 객체를 참조 할 방법이 없으므로 여기에 실제 옵션이 없습니다 (최소한 - 내가 생각할 수있는 아무 것도 없음). –

답변

0
listGraph getPlanarGraph(const vector<int> &nodeSe=this->getLabels());  

이 ... 수 없습니다, 메소드가 속한 클래스의 인스턴스가 아닙니다. this은 메서드가 실행되면 메서드가 속한 클래스의 인스턴스 만 참조합니다. 그것이 가능하지 않은 이유에

는 라인 위에이 같은 방법 호출에 다소 유사합니다

x xinstance; 
const vector<int> nodeSe labels = this->getLabels(); 
listGraph lg = xinstance.getPlanarGraph(labels); 

이 코드가 작동 것이다, 그러나 당신은 this이의 인스턴스를 참조 명확하게 볼 수 있습니다 위의 코드 줄은 어떤 클래스에 포함 되든지간에 xinstance이 아닙니다. 그러나 @Ivan Aucamp가 주석에서 지적한 것처럼, 멤버 함수 선언에서 표현 될 때 this은 그 시점에서 정의되지 않았기 때문에 아무 것도 참조하지 않습니다.

+0

실제로'listGraph getPlanarGraph (const vector & nodeSe = this-> getLabels());에서','this'는 아무 것도 가리 키지 않습니다. See C++ 03/[class.this]/1 –

+0

@IwanAucamp : 나는 그 사실을 분명히하지 않았 음에 동의합니다. 내가 명확하게 대답을 수정합니다. – Simon