Ошибка при использовании for_each - PullRequest
0 голосов
/ 10 апреля 2011

У меня есть следующие 2 функции в моем коде:

bool num()
{
    return 0;
}

void setDFS()
{
    int i = 0;
    project3::Graph<string, string> g1;

    std::for_each(g1.Vertice1.begin(), g1.Vertice1.end(),num);

}

Что функция делает для каждой Вершины в векторе Vertice1, ей нужно установить ее номер на 0 на данный момент.Как только я начну обход графика, позже я буду увеличивать число до пройденного числа.

Во время компиляции я получаю сообщение об ошибке «C2197:« bool (__cdecl *) (void) »: слишком много аргументов длявызов "ошибка.

template <class VertexType, class EdgeType> class Vertex{
protected:
    VertexType vertice;
    EdgeType edge;

public:

};

std::vector<project3::Vertex<VertexType, EdgeType>*> Vertice1;

Ответы [ 3 ]

3 голосов
/ 10 апреля 2011

for_each алгоритм получает унарную функцию , которая должна иметь следующую подпись:

void function(T&);

где T - тип элемента вектора g1.Vertice1:

template <class VertexType, class EdgeType>
void num(project3::Vertex<VertexType, EdgeType>* v) {
  *v = 0; // <- Maybe v->set(0,0,0)
}
0 голосов
/ 10 апреля 2011

Из предыдущего опыта работы с той же программой / тем же пользователем, что я считаю, я бы сказал, что num должен принимать строковый аргумент, так как ему нужно что-то для работы (посмотрите на объявление третьего аргумента в std:: for_each () в ваших заголовках).

Кроме того, если метод num () является частью объекта, я не думаю, что он будет работать напрямую (из-за неявного аргумента this в C ++ дляфункции-члены.)

Возможное решение - обертка, не являющаяся членом этой функции, например:

void my_non_member(string str)
{
    myobj.my_member(str); // myobj is a reference to a Vertice object that must be  
    // initialised elsewhere.
}
0 голосов
/ 10 апреля 2011

Взято с сайта SGI :

For_each применяет функциональный объект f к каждому элементу в диапазоне [first, last);Возвращаемое значение f, если оно есть, игнорируется.

И

Унарная функция - это вид объекта функции: объект, который вызывается так, как если бы он был обычнымС ++ функция.Унарная функция вызывается с одним аргументом.

Насколько я понял из документации, конструкция for_each будет перебирать переданную коллекцию и передавать текущий элемент вашей функции, в которойЗатем вам необходимо соответствующим образом обновить переданный элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...