我學習了一下C++的,從Java來了...爲什麼我需要一個默認構造函數,如果我從不明確調用它?
我寫了幾類,Vector
和Bezier
(三次貝塞爾曲線(有分量x,Y,Z三維向量)的基礎在4個輸入向量上)。
Vector
工作正常,沒有定義默認的構造函數。
Bezier
給了我一個編譯錯誤:
Bezier.h
class Bezier
{
public:
Vector p1;
Vector cp1;
Vector cp2;
Vector p2;
Bezier(const Vector &p1, const Vector &cp1, const Vector &cp2, const Vector &p2);
};
Bezier.cpp
Bezier::Bezier(const Vector &p1_, const Vector &cp1_, const Vector &cp2_, const Vector &p2_)
{
p1 = p1_;
cp1 = cp1_;
cp2 = cp2_;
p2 = p2_;
}
錯誤:
In constructor 'Bezier::Bezier(const Vector&, const Vector&, const Vector&, const Vector&)': error: no matching function for call to 'Vector::Vector()'
看來編譯器希望我創建一個默認的構造函數Vector()
,雖然我不需要它。我錯過了什麼明顯的東西?
你錯過了初始化列表。而「如果我從不明確地稱呼它」的答案?是你在*隱式地*調用它。 – meagar
你爲什麼認爲你不需要它? – immibis