我正在尝试实现调用类成员来获取同一类的另一个成员函数的默认参数。这就是我在做的事情:
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.getPlanarGraph()
,其中obj
是相应的类型,那么我想获取{{1}中所有标签集的列表}}。我知道我可以像下面这样编写一个简单的包装器(参见结尾),但我对为什么不感兴趣。对于上述声明,编译错误为:graph
。
当我提供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.
};
答案 0 :(得分:0)
listGraph getPlanarGraph(const vector<int> &nodeSe=this->getLabels());
...是不可能的,因为在调用方法时,this
指的是调用方法的类实例,而不是方法所属的类的实例。 this
仅引用方法执行后该方法所属的类的实例。
至于为什么不可能,上面的行有点类似于调用这样的方法:
x xinstance;
const vector<int> nodeSe labels = this->getLabels();
listGraph lg = xinstance.getPlanarGraph(labels);
这段代码可行,但您可以清楚地看到this
指的是包含上面代码行的任何类的实例,而不是xinstance
。正如@Ivan Aucamp在评论中指出的那样,当它在成员函数声明中表达时,this
没有引用任何东西,因为它没有在那时被定义。