2013-01-09 72 views
1

當我嘗試編譯項目中,我得到一個C2440錯誤說'initializing' : cannot convert from 'vector<component_count>' to 'vector_2D'.在C2440的MSDN文檔說The compiler cannot cast from 'type1' to 'type2'.我有一個基類,矢量:需要幫助修復奇怪的模板錯誤

template <unsigned int component_count> 
class vector {...} 

和派生類, vector_2D:

class vector_2D : public vector<2> 

我的基類定義了默認和複製構造函數,以及運算符重載。它給我的錯誤代碼是:在前面創建

vector_2D character_position = pen_position + vector_2D(offset_x, offset_y); 

pen_position作爲

vector_2D pen_position(string_position); 

我似乎無法修復我的錯誤。任何人都可以指出哪裏出了問題和/或如何解決它?

+0

什麼是原型的'運營商+'超載? –

+0

你的'operator +'是如何聲明/定義的? – Yuushi

+0

它是:vector operator +(const vector&a_vector)const – Cole

回答

0
vector operator + (const vector& a_vector) const 

是問題所在。您正在返回一個基礎,然後嘗試將其分配給派生。

最簡單的解決方法是提供過載

vector_2D operator + (const vector_2D& a_vector) const 
+0

如果我想避免完全重新定義操作符,我能否從派生類操作符中調用基類加法運算符,並將返回的基類重新投影到派生類?如果不是,我想我會分別定義vector_2D,vector_3D和vector_4D,而不使用繼承。 – Cole

+0

@Cole你可以使用某種標籤分派的模板來完成它,但它更復雜。 – Pubby

+0

好吧,我想我會刪除繼承。感謝您的回答和評論! – Cole