Я пытаюсь добиться вызова класса, чтобы получить параметры по умолчанию для другой функции-члена того же класса. Вот что я делаю:вызов члена класса для получения параметров по умолчанию для другой функции-члена того же класса
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
имеет соответствующего типа, то я хочу, чтобы получить список всех набора меток в . Я знаю, что могу написать простую упаковку для этого, например, следующую (см. Конец), но меня больше интересует , почему не разрешено. Для вышеприведенной декларации ошибка компиляции: 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.
};
Обходной я думаю это:
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' определяется только в нестационарном элементе функции-члена, и в противном случае член может не использоваться без объекта, поэтому, поскольку нет способа ссылаться на ваш объект в объявлении функции, здесь нет реальной возможности (по крайней мере - ни о чем я не могу думать). –