我有以下类,其中包括在标题内创建的模板方法:
Network.h
class Network
{
Network(cudnnHandle_t handle, std::vector<int> batch);
template <typename T, typename... Args, typename std::enable_if<std::is_same<Block, T>::value>::type* = nullptr> T create(Args&&... args)
{
Block block(handle_, batch_, std::forward<Args>(args)...);
blocks_.push_back(block);
return block;
}
};
我有另一个继承自Network类的类DACN,并在其构造函数中使用模板方法:
DACN.h
class DACN : public Network
{
public:
DACN(cudnnHandle_t handle, std::vector<int> batch, int temporal_stride, int action_dim) : Network(handle,batch)
{
auto s = create<Block>(temporal_stride,84,84);
}
};
此时所有内容都可以正常编译而不会出错。但是,只要我构造DACN.cpp文件并包含DACN.h文件:
DACN.cpp
#include "DACN.h"
编译DACN.cpp文件时出现以下错误:
DACN.h(13):错误:没有重载函数的实例“DACN :: create” 匹配参数列表参数类型是:(int,int,int)
为什么我会收到此错误?
答案 0 :(得分:0)
我发现了问题。我正在编译NVCC,因为我也在编译cuda代码。显然,NVCC在处理复杂的模板模式时遇到了问题。我现在重新安排了一些事情,使得NVCC在代码的模板证明部分调用GCC编译器。
抱歉占用你的时间。