0

この最小限の例:

int main() 
{
    struct surfaceReference* surfaceReferencePointer;
    cudaGetSurfaceReference(&surfaceReferencePointer, "surfaceReference"); 
}

次のようにコンパイルすると失敗します。

nvcc -g -arch=sm_20 -o foo.out foo.cu

次のエラー メッセージが表示されます。

foo.cu(4): warning: argument of type "surfaceReference **" is incompatible with parameter of type "const surfaceReference **"
foo.cu(4): warning: argument of type "surfaceReference **" is incompatible with parameter of type "const surfaceReference **"

foo.cu: In function ‘int main()’:
foo.cu:4: error: invalid conversion from ‘surfaceReference**’ to ‘const surfaceReference**’
foo.cu:4: error:   initializing argument 1 of ‘cudaError_t cudaGetSurfaceReference(const surfaceReference**, const char*)’

私は自分が間違っていることを理解できません。CUDA 3.2 を使用して、Linux Ubuntu 64 ビット マシンでコンパイルしています。

4

1 に答える 1

0

ポインターは次のstruct surfaceReference*ように定義する必要がありますconst

int main() 
{
    const struct surfaceReference* surfaceReferencePointer;
    cudaGetSurfaceReference(&surfaceReferencePointer, "surfaceReference"); 
}

コメントで正しい答えを提供してくれたcodymanixに敬意を表します。

于 2011-03-25T22:37:43.320 に答える