[英]Using Template classes in cuda / c++ code
我是使用cuda進行編碼的新手(並且在c ++中沒有豐富的經驗),所以我一直在閱讀以嘗試找到解決此問題的方法,但是通常不了解人們嘗試解釋的內容,並且尚未了解它工作。
基本上,我有一個.cu文件,其中包含兩件事:
template <class ModelType>
__global__ void Stepkernel(ModelType *particles)
和:
template <class ModelType>
void runTest(ModelType *particles)
然后,我有一個頭文件SamplerI.h,但我沒有編寫,但我試圖在上面包含對void函數的調用,因此,在所有我包含的#includes下面:
template <class ModelType>
void runTest(ModelType *particles);
然后在標題后面有一個函數,其中包括了對上面的調用。
標頭和相關文件在libdnest庫中編譯,我使用nvcc -c step.cu編譯.cu文件,然后鏈接:
g++ -o main main.cpp step.o -ldnest
現在,如果不存在該模板(即我只是有一個沒有提及ModelType的void函數),那么所有這些都很好,並且可以編譯並運行,但是一旦我嘗試並包含該模板,我就會收到以下編譯錯誤:
../../include/SamplerImpl.h: In member function ‘bool DNest3::Sampler<ModelType>::step() [with ModelType = Banana]’:
../../include/SamplerImpl.h:121: instantiated from ‘void DNest3::Sampler<ModelType>::run() [with ModelType = Banana]’
main.cpp:37: instantiated from here
../../include/SamplerImpl.h:159: error: no matching function for call to ‘runTest(Banana*)’
而且我不知道該怎么辦才能解決它...
有人有什么想法嗎? 如果我沒有足夠好地解釋,請告訴我,我將嘗試包括更多信息,我真的不知道重要的是什么。
干杯林德利
您需要在使用該模板的源文件中包含模板,以便編譯器將其實例化。
請注意,C ++ 11引入了“ extern”,但並非所有編譯器都支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.