2013-01-09 75 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