2017-02-09 4 views
1

申し訳ありませんが、私はまだこのことについて尋ねたが、私はエラーを得続ける私のプロジェクトでそれを実装しようとする場合、私は、小さな例をすれば解決策私は作品を与えてきた場合タイトルに
これは私が型要素の動的配列を作成し、私のstruct私の疎行列クラスで
一致コンストラクタ

template<typename T> 
struct element{ 
    int i; 
    int j; 
    T val; 

    element(){} 
    element(T &other): val(other){} // this is the solution i previously got 

    template<typename U> 
    element(const element<U>& e): val(static_cast<T>(e.val)), i(e.i), j(e.j){} 
    // this one is used to help the main class cast types. 
}; 

で、

element<T> *m; // the class is also template 

すべてが基本データ型でうまく動作します。私がする必要がどのような
elementsで作られた私の動的配列は、カスタムデータ型で動作するようにすることです。私が行ってきた
テストは、構造体のポイントである

struct point { 
    int x; 
    int y; 

    point(int xx, int yy) : x(xx), y(yy) {} 
}; 

私はクラスで実装コンストラクタがメインで、私は

sparseMatrix<point> mcp(point(1, 2)); 

Iを行うと

explicit sparseMatrix(const T& d) : mat(0), capacity(0), n(0), def_value(d) { 
    m = new element<T> [capacity]; 
} 

ですエラーが発生するno matching constructor for initialization of 'point' 何が間違っていますか?
どうすればこの問題を解決できますか?あなたがタイプTのインスタンスを保存element
テンプレートクラスで

+0

、あなたは必ず*あなたが ''要素なく 'のstd :: vector'へのポインタをしたい*ですか?ベクタを使用すると、再割り当てを自分で処理する必要はありません。また、あなたが表示する 'sparseMatrix'コンストラクタでは、' capacity'をゼロに初期化し、割り当てたデータのサイズに使用します。それは本当に良いアイデアだと思いますか? –

+0

私のプロジェクトではstlコンテナを使用することが許可されていないので、私はこれを行う必要がありました。要素が行列に追加されるたびに容量が増えます – user7337963

答えて

3

[ノート、私は++、11 C使用することはできません]。 element<T>インスタンスが作成されると、その後valデフォルトになりますを構築しました。

Tとすると、デフォルトのコンストラクタがないため、エラーが発生します。無関係なノートで

+0

問題は構造体にありますか? – user7337963

+0

@ user7337963はい。スパース行列を設計した方法では、含まれる型にデフォルトのコンストラクタが必要です。 –

+0

私に小さな例を教えてもらえますか?なぜなら、これは私が一度も見たことのないものだからです。 – user7337963

関連する問題