2016-03-21 28 views
-3

こんにちは、私はプログラムをデバッグしようとしています。私が受け取っているエラーの1つは、 'コンストラクタの初期化がありません'です。ベクターを先に宣言する必要がありますか?どのように初期化するのですか?初期化用のコンストラクタがありません

#include <iostream> 
#include <vector> 

using namespace std; 

class Point { 
private: 
    double x; 
    double y; 
public: 
    double get_x() { return x; } 
    double get_y() { return y; } 
    bool set_x(double arg) { 
     x = arg; 
     return true; 
    } 
    bool set_y(double arg) { 
     y = arg; 
     return true; 
    } 
    Point() : x(0), y(0) {} 
    Point(double argx, double argy) : x(argx), y(argy) { 
    } 
}; 


class Vector { 
private: 
    Point A; 
    Point B; 
public: 
    Point get_A() { return A; } 
    Point get_B() { return B; } 
    Vector(const Point &arg1, const Point &arg2) : A(arg1), B(arg2) 
    { 
     //this->A = arg1; 
     //this->B = arg2; 
     //A = arg1; 
     //B = arg2; 
    } 
    void set_A(const Point &arg) { 
     A = arg; 
    } 
    void set_B(const Point &arg) { 
     B = arg; 
    } 
    static Vector add_vector(const Vector &vector1, const Vector &vector2) { 
     if (&vector1.B != &vector2.A) { 

      //Error 1 Vector V1 No Matching constructor for initialization for 'vector' 

      Vector rval; 
      return rval; 
     } 

     Point one = vector1.A; 
     Point two = vector2.B; 

     Vector newvector(one, two); 
     //newvector.A = one; 
     //newvector.B = two; 
     return newvector; 

    } 
    Vector add_vector(const Vector &arg) { 
     // Type of this? Vector *; These three lines are equivalent: 
     //Point one = this->A; 
     //Point one = (*this).A; 
     Point one = A; 

     Point two = arg.B; 

     Vector newvector(one, two); 
     //newvector.A = one; 
     //newvector.B = two; 
     return newvector; 
    } 

}; 


int main() { 

    //Error 2 Vector v No Matching constructor for initialization for 'vector' 


    Vector v; 
    cout << "(" << v.get_A().get_x() << ", " << v.get_A().get_y() << "),\n" << 
    "(" << v.get_B().get_x() << ", " << v.get_B().get_y() << ")\n"; 

    //Error 3 Vector V1 No Matching constructor for initialization for 'vector' 


    Vector v1(1,2), v2(2,3); 
    Vector res = Vector::add_vector(v1, v2); 
    cout << "(" << res.get_A().get_x() << ", " << res.get_A().get_y() << "),\n" << 
    "(" << res.get_B().get_x() << ", " << res.get_B().get_y() << ")\n"; 

} 

答えて

1

ここでの問題は、あなたのクラスがデフォルトで構成可能でないことです。

Vector rval; 

デフォルトコンストラクタが必要です。あなたがユーザー定義のコンストラクタを提供して以来、コンパイラはもはやあなたのためにデフォルトのコンストラクタを作成しません。

は、あなたがC++ 11以上を持っている場合は、

Vector() = default; 

を使用することができますVectorのデフォルトコンストラクタを作成するか、事前にC++ 11の場合

Vector() {} 

を使用することができます。

私はあなたが2 Point sおよび各Pointニーズ2つの値を必要とするVector

Vector v1(1,2) 

でやろうとしているかわかりません。

+0

ありがとう、Vector v1(1,2)に関して、このプログラムでは割り当てのためにデバッグする必要があります。それで私はこれを必要とするか、それが何をするのか、それとも何をするつもりなのかを尋ねています。ありがとう@ NathanOliver – Bigboy6

+0

@ Bigboy6私はわかりません。 'Vector'は' Point'をとり、 '1'は' Point'ではありません。私がすることを意図したコードを書いた人を知りませんでした。 – NathanOliver

関連する問題