동일한 클래스의 다른 멤버 함수에 대한 기본 매개 변수를 가져 오기 위해 클래스 멤버를 호출하려고합니다. 여기가 내가 뭐하는 거지입니다 :동일한 클래스의 다른 멤버 함수에 대한 기본 매개 변수를 가져 오기 위해 클래스 멤버 호출
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.
};
불가능합니다. 해결 방법은 여기에 한해서만 가능합니다. –
@IwanAucamp 좋습니다. 그러나 이것이 왜 불가능한가? 이런 종류의 설정이 허용되는 경우 어떤 문제가 발생할 수 있습니까? –
은 C++ 03/[class.this]/1; 'this'는 비 정적 멤버 함수 body에서만 정의됩니다. 멤버는 객체 없이는 사용할 수 없습니다. 따라서 함수 선언에서 객체를 참조 할 방법이 없으므로 여기에 실제 옵션이 없습니다 (최소한 - 내가 생각할 수있는 아무 것도 없음). –