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