Скажем, у меня есть это фиктивное определение класса: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;
}
Теперь, если я compile (с опциями: -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)
, потому что у них есть другая сигнатура параметра.
Что-то мне не хватает: что это такое?
Подсказка: посмотрите на значения по умолчанию во втором конструкторе. – skypjack
Конечно, это правда. Благодаря :). – grd