2013-05-14 110 views
0

所以我的問題是:我在mac os x mountain lion上使用Nvidia的nsight應用程序編寫CUDA應用程序:源代碼是一個.H/.CU /混合的.cppCUDA:__device__和__global__錯誤:預期的構造函數,析構函數或在「unsigned」/「void」之前的類型轉換「

我有一個HelloCUDA.h頭與以下聲明:

//yep, both taken from examples. 
__device__ unsigned int bitreverse2(unsigned int number); 

__global__ void bitreverse(void *data); 

和我有限定這些方法的HelloCUDA.cu文件:

__device__ unsigned int bitreverse3(unsigned int number) { 
    //definition 
    return number; 
} 

__global__ void bitreverse4(void *data) { 
    //another definition... 
    bitreverse3(idata[threadIdx.x]); 
} 

它工作,直到我使用eclipse(nsight)新類嚮導添加了新的C++類文件(.h/.cpp)。現在,當我試圖建立這樣的事情:

../src/HelloCUDA.h:21: error: expected constructor, destructor, or type conversion before ‘unsigned’ 
../src/HelloCUDA.h:23: error: expected constructor, destructor, or type conversion before ‘void’ 

我檢查項目設置,我不認爲有任何改變。

那麼,什麼給了?任何人都可以,請幫我解決這個問題?

+0

什麼是'idata'?我沒有看到它在任何地方定義。 – talonmies 2013-05-14 18:21:42

+0

如果HelloCUDA.h包含在.cpp文件中而不是.cu文件中,它將不起作用。 .cpp文件被髮送到主編譯器,它不知道'__device__'或'__global__'是什麼。無論如何,你不應該在任何.cpp文件中需要該標題(基於此問題中發佈的內容)。 – 2013-05-14 18:56:28

+0

idata只是代碼的一部分。這並不重要,這不是問題所在。 – 2013-05-14 18:56:53

回答

1

您可能使用「CUDA C Bitreverse Application」模板創建了一個新的CPP文件。該模板用於CUDA C文件。只需刪除文件內容並添加您的C++代碼即可。

相關問題