2016-07-04 10 views
0

私は以下の問題が既に発生しています。私はstackoverflowで少し読んでいると私はtypedefを使用しているが、私は私を助けていないポイントist。いくつかの助けを得ることを楽しみにしてエラー:C++エニュメ​​レーションの呼び出しで一致する関数がありません

:)

Align_vector.h:

#include <utils/vector_2d.h> 
class Vector_2d; 

namespace Utils { 

class Align_vector : public Vector_2d { 
protected: 
    bool check_range(int x, int y); 

public: 

    typedef enum {left, right, up, down} Alignment; 

    Align_vector(Alignment alignment); 
    void set_alignment(Alignment alignment); 
    Alignment get_alignment(); 

}; 

} /* namespace Utils */ 

Align_vector.cc:ここ

#include <utils/align_vector.h> 


namespace Utils { 

Align_vector::Align_vector(Alignment alignment) { 
    this->alignment = alignment; 
} 

void set_alignment(Alignment alignment) { 
    Align_vector::alignment = alignment; 
} 

Alignment get_alignment() { 
    return Align_vector::alignment ; 
} 

bool check_range(int x, int y) { 
    switch (Align_vector::alignment) { 
     case Align_vector::left: 
      if (x == -1 && y == 0) { 
       return true; 
      } else { 
       return false; 
      } 
      break; 
     case Align_vector::right: 
      if (x == 1 && y == 0) { 
       return true; 
      } else { 
       return false; 
      } 
      break; 
     case Align_vector::down: 
      if (x == 0 && y == -1) { 
       return true; 
      } else { 
       return false; 
      } 
      break; 
     case Align_vector::up: 
      if (x == 0 && y == 1) { 
       return true; 
      } else { 
       return false; 
      } 
      break; 
     default: 
      return false; 
      break; 
    } 

} 


} /* namespace Utils */ 

はエラーです:

/utils/align_vector.cc:14:47: error: no matching function for call to ‘Utils::Vector_2d::Vector_2d()’ Align_vector::Align_vector(Alignment alignment) {

+0

'typedef enum {...}整列;'私にちょっと奇妙に見えます。どこからこれを取得しましたか?なぜ列挙型を列挙できないのですか? – user463035818

+0

フォーラムでは、これがより良い解決策になると言いましたが、解決策を講じても同じエラーが発生しています。 – kellerprogger

+0

もっと良い解決策は何ですか? Btwにはコード内に他のものがありません。 'Align_vector :: alignment'とは何でしょうか? – user463035818

答えて

1

このコードには、慈悲深い問題。まず、Alignmentという enumを定義しましたが、そのタイプのメンバー は宣言していません。そのためには、enumの定義の後に次の行を追加します。あなたは いくつかの機能でそれを使用している間方法の

Alignment alignment; 

あなたの定義はまた間違って、アライメントは、特定のオブジェクトに属することになっ ですあたかもそれがクラスの静的メンバーであるかのように。ここ は、メソッド定義の固定バージョンです:最後に、あなたは基本 クラスVector_2dのデフォルトコンストラクタの定義が欠落している

namespace Utils { 

Align_vector::Align_vector(Alignment alignment) { 
    this->alignment = alignment; 
} 

void Align_vector::set_alignment(Alignment alignment) { 
    this->alignment = alignment; 
} 

Align_vector::Alignment Align_vector::get_alignment() { 
    return this->alignment; 
} 

bool Align_vector::check_range(int x, int y) { 
    switch(this->alignment) { 
    case Align_vector::left: 
     if(x == -1 && y == 0) { 
      return true; 
     } 
     else { 
      return false; 
     } 
     break; 
    case Align_vector::right: 
     if(x == 1 && y == 0) { 
      return true; 
     } 
     else { 
      return false; 
     } 
     break; 
    case Align_vector::down: 
     if(x == 0 && y == -1) { 
      return true; 
     } 
     else { 
      return false; 
     } 
     break; 
    case Align_vector::up: 
     if(x == 0 && y == 1) { 
      return true; 
     } 
     else { 
      return false; 
     } 
     break; 
    default: 
     return false; 
     break; 
    } 

} 


} /* namespace Utils */ 

(あなたのコメントはあなただけで、すべてであなたをそのクラス を定義していないことを示唆していますステートメントclass Vector_2d;を使用してその存在を宣言しました)。 あなたの全体的な実装で判断すると、@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?

希望すると便利です。

+0

今、私は理解しています。私はvector2dの通常のコンストラクタが必要なだけだと思ったので、デフォルトのものを追加してすべて動作します。ありがとうございます! – kellerprogger

関連する問題