我正试图让tvmet与VS2010合作。我已经下载了TvMet源代码(http://tvmet.sourceforge.net/),包含了我的项目设置中的include目录。然后我写了
#include <tvmet/Matrix.h>
using namespace tvmet;
但是我收到编译错误,说缺少config.h。没关系。所以我从配置文件夹config-vc71.h
复制到tvmet目录只是config.h
,但我得到了错误
"Error 25 error C2244: 'tvmet::CommaInitializer<Obj,LEN>::operator ,' : unable to match function definition to an existing declaration"
这个错误意味着什么,我该如何解决?
答案 0 :(得分:3)
在CommaInitializer.h中,内联
的实现Initializer<value_type, 2> operator,(value_type rhs);
这
template<class Obj, std::size_t LEN>
typename CommaInitializer<Obj, LEN>::template Initializer<typename Obj::value_type, 2>
CommaInitializer<Obj, LEN>::operator,(typename Obj::value_type rhs)
{
m_wipeout_on_destruct = false;
iterator iter1 = m_object.data();
*iter1 = m_data;
iterator iter2 = iter1 + 1;
*iter2 = rhs;
return Initializer<value_type, 2>(iter2 + 1);
}
到
Initializer<value_type, 2> operator,(value_type rhs)
{
m_wipeout_on_destruct = false;
iterator iter1 = m_object.data();
*iter1 = m_data;
iterator iter2 = iter1 + 1;
*iter2 = rhs;
return Initializer<value_type, 2>(iter2 + 1);
}
VS不喜欢函数定义中的:: template关键字。如果你删除了:: template关键字,你将破坏gcc :(但如果你内联实现它应该可以正常工作。
希望有所帮助
答案 1 :(得分:0)
以下行尝试声明重载的逗号“,”运算符函数
Initializer<value_type, 2> operator,(value_type rhs);
但VC ++无法将函数定义与其声明匹配。所以我注释掉了上面这一行,而是添加了以下函数声明
typename CommaInitializer<Obj, LEN>::template Initializer<typename Obj::value_type, 2>
CommaInitializer<Obj, LEN>::operator,(typename Obj::value_type rhs);