私は C++ が初めてで、オープン ソースの C++ プロジェクトを取得して x コードでコンパイルしようとしています。このコードの最後の 2 行:
template<typename T>
struct TVector3 : public TVector2<T> {
T z;
TVector3(T _x = 0.0, T _y = 0.0, T _z = 0.0)
: TVector2(_x, _y), z(_z)
エラーをスローしています:メンバー初期化子は非静的データメンバーに名前を付けていません
(メンバー初期化子は非静的データメンバーまたは基本クラスに名前を付けません)に基づいて、コードを次のように変更してみました:
template<typename T>
struct TVector3 : public TVector2<T> {
T z;
TVector3(T _x = 0.0, T _y = 0.0, T _z = 0.0)
: TVector2(_x, _y)
{ z(_z);}
しかし、私は同じエラーが発生しています。スーパークラス Vector2 のコードは次のとおりです。このエラーを解決するにはどうすればよいですか?
struct TVector2 {
T x, y;
TVector2(T _x = 0.0, T _y = 0.0)
: x(_x), y(_y)
{}
double Length() const {
return sqrt(static_cast<double>(x*x + y*y));
}
double Norm();
TVector2<T>& operator*=(T f) {
x *= f;
y *= f;
return *this;
}
TVector2<T>& operator+=(const TVector2<T>& v) {
x += v.x;
y += v.y;
return *this;
}
TVector2<T>& operator-=(const TVector2<T>& v) {
x -= v.x;
y -= v.y;
return *this;
}
};