piro1107
@piro1107
Студент

Параметры по умолчанию во friend-функции. Почему ругается?

Пишу класс "граф" и дружественную функцию "поиск в ширину". В функцию в параметр "ваш граф" передаю по умолчанию конструктор, который создаёт граф из 1 вершины. Дальше за меня расскажет код:
/**********
 * граф содержит:
 * количество точек
 * вектор связности
 **********/
class Graph {
    int vs;
    std::vector<int> **relations;
public:
    Graph(int _vs = 1){
        vs = _vs;
        relations = new std::vector<int>*[_vs];
        for(int i = 0; i < _vs; i++) relations[i] = new std::vector<int>;
    }
    Graph &bind(int from, int to);
    // печать в стандартный поток
    friend std::ostream & operator <<(std::ostream &out, Graph &g);
    // поиск в ширину
    friend int **bfs(Graph g = Graph::Graph());
};


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

UPD: ответ 1, ответ 2
  • Вопрос задан
  • 2276 просмотров
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
отчего ж компилятор ругается на мой параметр по умолчанию?

От того, что не нужно вызывать конструктор как функцию. Пиши просто
friend int **bfs(Graph g = Graph());
Ответ написан
Рискну преположить, что он хочет вместо Graph::Graph() видеть просто Graph(). И немного оффтопик, я может чего-то не понимаю, но зачем обходу в ширину граф передается как параметр по-умолчанию, это немного странно обходить в ширину граф по-умолчанию (я так преполагаю пустой граф).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы