申し訳ありませんが、私はまだこのことについて尋ねたが、私はエラーを得続ける私のプロジェクトでそれを実装しようとする場合、私は、小さな例をすれば解決策私は作品を与えてきた場合タイトルに
これは私が型要素の動的配列を作成し、私の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
テンプレートクラスで
、あなたは必ず*あなたが ''要素なく 'のstd :: vector'へのポインタをしたい*ですか?ベクタを使用すると、再割り当てを自分で処理する必要はありません。また、あなたが表示する 'sparseMatrix'コンストラクタでは、' capacity'をゼロに初期化し、割り当てたデータのサイズに使用します。それは本当に良いアイデアだと思いますか? –
私のプロジェクトではstlコンテナを使用することが許可されていないので、私はこれを行う必要がありました。要素が行列に追加されるたびに容量が増えます – user7337963