比方說,我有這個虛擬的類定義: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)
含糊不清,因爲它們具有不同的參數簽名。
我錯過了一些東西:它是什麼?
提示:看看第二個構造函數的默認值。 – skypjack
當然,這是真的。謝謝 :)。 – grd