我正在尝试让 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"
此错误意味着什么以及如何解决它?
最佳答案
在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 :( 但如果您内联实现,它应该可以正常工作。
希望对你有帮助
关于visual-studio-2010 - TVMet(矩阵库)与 VS2010,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16718139/