TVMet(矩阵库)与VS2010

时间:2013-05-23 15:34:34

标签: visual-studio-2010 compilation

我正试图让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"

这个错误意味着什么,我该如何解决?

2 个答案:

答案 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);