C ++ 11 — C ++ вызов перегруженного конструктора неоднозначен

Допустим, у меня есть это фиктивное определение класса:

    class Node
{
public:
Node ();
Node (const int = 0);
int getVal();
private:
int val;
};

И реализации фиктивного конструктора только для образовательных целей:

Node::Node () : val(-1)
{
cout << "Node:: DEFAULT CONSTRUCTOR" << endl;
}Node::Node(const int v) : val(v)
{
cout << "Node:: CONV CONSTRUCTOR val=" << v << endl;
}

Сейчас, если я скомпилирую (с параметрами: -Wall -Weffc++ -std=c++11) код ниже:

#include <iostream>
#include "node.h"using namespace std;

int main()
{
Node n;
return 0;
}

Я получаю эту ошибку, и не компилируется вообще:

node_client.CPP: In function ‘int main()’:
node_client.CPP:10:16: error: call of overloaded ‘Node()’ is ambiguous
Node n;
^
node_client.CPP:10:16: note: candidates are:
In file included from node_client.CPP:4:0:
node.h:14:5: note: Node::Node(int)
Node (const int = 0);
^
node.h:13:2: note: Node::Node()
Node ();
^

Я не могу понять почему.

Насколько я знаю (я изучаю C ++), вызов Node::Node() не должно быть двусмысленным в отношении Node::Node(const int) потому что имеют другую сигнатуру параметра.

Есть кое-что, чего мне не хватает: что это?

5

Решение

вызов Node :: Node () не должен быть неоднозначным по отношению к Node :: Node (const int), поскольку они имеют другую сигнатуру параметра.

Конечно, это неоднозначно. Подумай дважды!

У тебя есть

    Node ();
Node (const int = 0);

какой из них должен быть выбран при звонке Node()?? Тот, с параметром по умолчанию?

Он должен работать без предоставления значения по умолчанию:

    Node ();
Node (const int); // <<<<<<<<<<<<< No default
8

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

Компилятор просто не может знать, хотите ли вы вызвать конструктор по умолчанию или int конструктор со значением по умолчанию.

Вы должны удалить значение по умолчанию или удалить конструктор по умолчанию (который делает то же самое, что ваш конструктор с int так что на самом деле это не проблема!)

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector