вызвать члена класса, чтобы получить параметры по умолчанию для другой функции-члена того же класса

Я пытаюсь добиться вызова члена класса, чтобы получить параметры по умолчанию для другой функции-члена того же класса. Вот что я делаю:

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.
};

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 не относится ни к чему, потому что это не определено в тот момент.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]