求助各位大神:VS2010 error C3416:显式专用化可能无法显式实例化

时间:2022-03-03 22:55:28
//MatrixBase.h
template<class Real>
class MatrixBase {
    ...
    template<typename OtherReal>
    void CopyFromSp(const SpMatrix<OtherReal> &M);
    ...
}
///////////////////////////////////////////////////////////////////////

//MatrixBase.cpp
template<typename Real>
template<typename OtherReal>
void MatrixBase<Real>::CopyFromSp(const SpMatrix<OtherReal> & M) {...}

template
void MatrixBase<float>::CopyFromSp(const SpMatrix<float> & M);
template
void MatrixBase<float>::CopyFromSp(const SpMatrix<double> & M);
template
void MatrixBase<double>::CopyFromSp(const SpMatrix<float> & M);
template
void MatrixBase<double>::CopyFromSp(const SpMatrix<double> & M);
//////////////////////////////////////////////////////////////////////
编译后,描红的两行报错:
error C3416: “kaldi::MatrixBase<Real>::CopyFromSp”: 显式专用化可能无法显式实例化
          with
          [
              Real=float
          ]
 error C3416: “kaldi::MatrixBase<Real>::CopyFromSp”: 显式专用化可能无法显式实例化
          with
          [
              Real=double
          ]

不知道为什么出错,请各位大神指教!

11 个解决方案

#1


你写这一坨想干嘛?

#2


引用 1 楼 taodm 的回复:
你写这一坨想干嘛?

这是一个开源的工具包,编译的时候出错了

#3


那你可能不得不改用此工具包当初使用的编译器了
模板的可移植性是很差的。

#4


引用 3 楼 taodm 的回复:
那你可能不得不改用此工具包当初使用的编译器了
模板的可移植性是很差的。

这个工具包是在linux下开发的,但是提供了windows下VS2010的工程文件。
这个错误能改吗?

#5


引用 4 楼 gzyangxk 的回复:
引用 3 楼 taodm 的回复:那你可能不得不改用此工具包当初使用的编译器了
模板的可移植性是很差的。
这个工具包是在linux下开发的,但是提供了windows下VS2010的工程文件。
这个错误能改吗?

1. 2010打个sp1试试
2. 如果还不行,给这个开源的开发和维护人员发邮件问问
3. 如果还不行,最好放弃,或者把上面两个函数删了,试试能不能编

#6


linux下如果用gcc的话,windows下可用mingw

#7


引用 5 楼 buyong 的回复:
1. 2010打个sp1试试
2. 如果还不行,给这个开源的开发和维护人员发邮件问问
3. 如果还不行,最好放弃,或者把上面两个函数删了,试试能不能编

好,谢谢大神,我先试试

#8


引用 6 楼 buyong 的回复:
linux下如果用gcc的话,windows下可用mingw

这个工具包可以在WINDOWS下用cygwin编译的,不过我不想这样,我想在这个工具包的基础上改进一下算法,所以准备先调通VS2010工程

#9


在你对模板掌握度比较低的情况下,最好别折腾。
你很容易造成可以编译,但是调用的不是应该的函数。

#10


引用 9 楼 taodm 的回复:
在你对模板掌握度比较低的情况下,最好别折腾。
你很容易造成可以编译,但是调用的不是应该的函数。

确实是这种情况,我刚开始注释掉那几行,这个子项目编译通过了,但是在另一个项目里调用这个lib库的时候就无法解析相应的函数了

#11


kaldi,还是换linux吧

#1


你写这一坨想干嘛?

#2


引用 1 楼 taodm 的回复:
你写这一坨想干嘛?

这是一个开源的工具包,编译的时候出错了

#3


那你可能不得不改用此工具包当初使用的编译器了
模板的可移植性是很差的。

#4


引用 3 楼 taodm 的回复:
那你可能不得不改用此工具包当初使用的编译器了
模板的可移植性是很差的。

这个工具包是在linux下开发的,但是提供了windows下VS2010的工程文件。
这个错误能改吗?

#5


引用 4 楼 gzyangxk 的回复:
引用 3 楼 taodm 的回复:那你可能不得不改用此工具包当初使用的编译器了
模板的可移植性是很差的。
这个工具包是在linux下开发的,但是提供了windows下VS2010的工程文件。
这个错误能改吗?

1. 2010打个sp1试试
2. 如果还不行,给这个开源的开发和维护人员发邮件问问
3. 如果还不行,最好放弃,或者把上面两个函数删了,试试能不能编

#6


linux下如果用gcc的话,windows下可用mingw

#7


引用 5 楼 buyong 的回复:
1. 2010打个sp1试试
2. 如果还不行,给这个开源的开发和维护人员发邮件问问
3. 如果还不行,最好放弃,或者把上面两个函数删了,试试能不能编

好,谢谢大神,我先试试

#8


引用 6 楼 buyong 的回复:
linux下如果用gcc的话,windows下可用mingw

这个工具包可以在WINDOWS下用cygwin编译的,不过我不想这样,我想在这个工具包的基础上改进一下算法,所以准备先调通VS2010工程

#9


在你对模板掌握度比较低的情况下,最好别折腾。
你很容易造成可以编译,但是调用的不是应该的函数。

#10


引用 9 楼 taodm 的回复:
在你对模板掌握度比较低的情况下,最好别折腾。
你很容易造成可以编译,但是调用的不是应该的函数。

确实是这种情况,我刚开始注释掉那几行,这个子项目编译通过了,但是在另一个项目里调用这个lib库的时候就无法解析相应的函数了

#11


kaldi,还是换linux吧