在VS2013中使用nvcc编译时,“析构函数上不允许使用修饰符”错误

时间:2016-01-25 19:52:59

标签: c++ c++11 cuda nvcc

我在Visual Studio 2013上,正在尝试编译一个利用继承和C ++ 11的CUDA代码。由于“覆盖”,下面的代码返回“析构函数不允许修饰符”错误。

// derived.cuh
class derived : public base
{
 public:
  derived();
  ~derived() override;
};

其中基类的析构函数是虚拟的。完全相同的代码在Ubuntu上编译得很好。如果我将.cu和.cuh更改为.cpp和.h,完全相同的代码也可以使用默认的Visual Studio c ++编译器编译。 C ++ 11已启用,因为如果“覆盖”附加在普通函数上,它也可以编译。见下面的例子,

// derived2.cuh
class derived2 : public base
{
 public:
  derived2();
  ~derived2();

  void func() override;
};  

其中func()是基类中的虚函数。

在VS2013中使用nvcc编译时,如何摆脱“析构函数不允许使用修饰符”错误?

1 个答案:

答案 0 :(得分:1)

将此错误提交给NVIDIA,他们回复说这将在下一个CUDA版本中修复(大概是8.0)。