2017-02-09 92 views
1

對不起,如果我仍然問這個問題,但我已經給出的解決方案,如果我做一個小例子,如果我嘗試在我的項目中實現它我不斷收到錯誤在標題中。
這是我的結構
沒有匹配的構造函數初始化'點'

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) {} 
}; 

我在類中實現的構造是

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

當主我做

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

我得到錯誤no matching constructor for initialization of 'point' 我在做什麼錯了?
我該如何解決這個問題?

+0

在一個不相關的筆記上,你是否確定*你想要一個指向'element '而不是'std :: vector'的指針?使用矢量,您不必自己處理重新分配。另外,在你展示的'sparseMatrix'構造函數中,你將'capacity'初始化爲零,並將其用於分配數據的大小。你確定這是個好主意嗎? –

+0

我不得不這樣做,因爲我的項目我不允許使用stl容器。每次將一個元素添加到矩陣中時,容量都會增加 – user7337963

回答

3

element你存儲的類型T的實例[筆記,我不能C++ 11使用在模板類。當創建一個element<T>實例時,val將爲默認構造爲

當你使用point作爲T你會得到一個錯誤,因爲它沒有默認的構造函數。

+0

所以問題出在點Struct上? – user7337963

+0

@ user7337963是的。你設計稀疏矩陣的方式,它需要包含的類型有一個默認的構造函數。 –

+0

你介意給我一個小例子嗎?因爲這是我從來沒有遇到過的事情 – user7337963

相關問題