jaykumarark
jaykumarark

Reputation: 2449

CUDA: incomplete type is not allowed et al.

Code:

#include <cutil.h>
#include <cstdlib>
#include <cstdio>
#include <string.h>

#if defined(__APPLE__) || defined(MACOSX)
    #include <GLUT/glut.h>
#else
    #include <GL/glut.h>
#endif
#include <cuda_gl_interop.h>

#include "fluid_system_kern.cu"

extern "C"
{

// Compute number of blocks to create
int iDivUp (int a, int b) {
    return (a % b != 0) ? (a / b + 1) : (a / b);
}
void computeNumBlocks (int numPnts, int minThreads, int &numBlocks, int &numThreads)
{
    numThreads = min( minThreads, numPnts );
    numBlocks = iDivUp ( numPnts, numThreads );
}


void Grid_InsertParticlesCUDA ( uchar* data, uint stride, uint numPoints )
{
    int numThreads, numBlocks;
    computeNumBlocks (numPoints, 256, numBlocks, numThreads);

    // transfer point data to device
    char* pntData;
    size = numPoints * stride;
    cudaMalloc( (void**) &pntData, size);
    cudaMemcpy( pntData, data, size, cudaMemcpyHostToDevice);    

    // execute the kernel
    insertParticles<<< numBlocks, numThreads >>> ( pntData, stride );

    // transfer data back to host
    cudaMemcpy( data, pntData, cudaMemcpyDeviceToHost);

    // check if kernel invocation generated an error
    CUT_CHECK_ERROR("Kernel execution failed");
    CUDA_SAFE_CALL(cudaGLUnmapBufferObject(vboPos));
}

error:

src/fluid_system.cu(30): error : incomplete type is not allowed (points to line -> "void Grid_InsertParticleCUDA")
src/fluid_system.cu(30): error : identifier "uchar" is undefined (points to line -> "void Grid_InsertParticleCUDA")
src/fluid_system.cu(30): error : identifier "data" is undefined (points to line -> "void Grid_InsertParticleCUDA")
src/fluid_system.cu(30): error : expected a ")" (points to line -> "void Grid_InsertParticleCUDA")
src/fluid_system.cu(31): error : expected a ";" (points to line after line-> "void Grid_InsertParticleCUDA")

I don't understand what seems to be the problem. Since I dont see anything strange with that line. I use CUDA 4.2

Upvotes: 1

Views: 3436

Answers (1)

Robert Crovella
Robert Crovella

Reputation: 151869

As pointed out already, you have a few syntax errors.

  1. uchar is not defined anywhere in your program. Either add a defintion for it or change it to unsigned char which is the proper C/C++ type.
  2. You have an incorrect arrangement of curly-braces here:

    extern "C"
    {  // this opening curly-brace has no proper corresponding close-brace
    
    // Compute number of blocks to create
    int iDivUp (int a, int b) {  // this open brace
        return (a % b != 0) ? (a / b + 1) : (a / b);
    } // ... closes here
    //  you should insert another closing curly-brace here }
    void computeNumBlocks ...
    

Upvotes: 2

Related Questions