使用函数指针时c++模板编译错误
c++ template compiling error when using function pointers
我得到以下代码的编译错误:
定义一个新的类型函数指针,由于某种语义原因,我必须用结构体包装它:
template<typename T>
struct sparseDistance{
typedef float (*sparseDistanceCore)(typename std::vector<colcell<T> >::iterator,
typename std::vector<colcell<T> >::iterator, unsigned, unsigned, unsigned, T);
};
下面的函数是引用3个函数:sparseDistanceEuc, sparseDistanceCheb和sparseDistanceCB
template<typename T>
typename sparseDistance<T>::sparseDistanceCore getDistanceFun(std::string& ms)
{
if(ms=="Euc")return &sparseDistanceEuc;
else if(ms=="Cheb")return &sparseDistanceCheb;
return &sparseDistanceCB;
}
在主事件函数定义中:
template<typename T>
std::vector<float> sparsePairColDInternal(std::vector<std::vector<colcell<T> > >&M,
std::string&metric, typename T specialValue=0){
typename sparseDistance<T>::sparseDistanceCore D=
getDistanceFun<typename sparseDistance<T>::sparseDistanceCore>(metric);
//...Do the rest steps
}
在main()函数中,我将类型(T)初始化为double。然后编译器给出以下错误:
distanceFuntion.cpp(187): error C2440: 'initializing' : cannot convert from 'float (__cdecl *) (std::_Vector_iterator<_Myvec>,std::_Vector_iterator<_Myvec>,unsigned int,unsigned int,unsigned int,T)' to 'float (__cdecl *)(std::_Vector_iterator<_Myvec>,std::_Vector_iterator<_Myvec>,unsigned int,unsigned int,unsigned int,T)'
with
[
_Myvec=std::_Vector_val<std::_Simple_types<colcell<float (__cdecl *)(std::_Vector_iterator<std::_Vector_val<std::_Simple_types<colcell<double>>>>,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<colcell<double>>>>,unsigned int,unsigned int,unsigned int,double)>>>,
T=float (__cdecl *)(std::_Vector_iterator<std::_Vector_val<std::_Simple_types<colcell<double>>>>,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<colcell<double>>>>,unsigned int,unsigned int,unsigned int,double)
]
and
[
_Myvec=std::_Vector_val<std::_Simple_types<colcell<double>>>,
T=double
]
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
distanceFuntion.cpp(234) : see reference to function template instantiation 'std::vector<_Ty> sparsePairColDInternal<T>(std::vector<std::vector<colcell<T>>> &,std::string &,T)' being compiled
with
[
_Ty=float,
T=double
]
distanceFuntion.cpp(324) : see reference to function template instantiation 'std::vector<_Ty> sparsePairColDNoneBin<double>(std::vector<sparseColumn<T>> &,std::string &,T)' being compiled
with
[
_Ty=float,
T=double
]
有人能帮忙吗?
谢谢!
在我看来就像sparsePairColDInternal
中的这一行:
typename sparseDistance<T>::sparseDistanceCore D=
getDistanceFun<typename sparseDistance<T>::sparseDistanceCore>(metric);
应:typename sparseDistance<T>::sparseDistanceCore D=
getDistanceFun<T>(metric);
否则getDistanceFun
的类型看起来像这样:
typename sparseDistance<sparseDistance<T>::sparseDistanceCore>::sparseDistanceCore getDistanceFun(std::string& ms)
相关文章:
- std::is_base_of表示ctor编译错误
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- 如何修复sfml c++代码编译错误
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- vscode下的Arduino代码出现意外编译错误
- 第三方 API 中的编译错误 - Visual Studio
- std::cout输出int时出现编译错误
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 提升图广度优先搜索前置编译错误
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 我在C++中遇到了这个奇怪的编译错误
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 现代OpenGL和GLEW Libraray的编译错误
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- C ++程序编译错误,找不到/访问文件
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么传递非静态成员函数会导致编译错误?