I have an error: expression must have class type in the device function

When I run the following kernel, it gives the same error.

__device__ void levenshteinDistance(int srcLength,char *patternRemoved, int distinctStart, int distinctEnd,char *pattern,int clStart,int clEnd, char *src,int *srcIndices, int strucStart, int strucEnd,int tokensStrucStart,int tokensStrucEnd,int tokensClStart,int tokensClEnd,int wordsClStart,int wordsClEnd,int wordsStrucStart,int wordsStrucEnd,int wordsTokensClStart,int wordsTokensClEnd, int wordsTokensStrucStart, int wordsTokensStrucEnd,int *dX,int *ResultFinal,float *TokensFinal,float *WordsTokensFinal1,float *WordsTokensFinal2,float *WordsFinal1,float *WordsFinal2,float *WordsFinal)
{
   
        for (int i = distinctStart; i < distinctEnd; i++) {
            for (int j = strucStart; j < strucEnd; j++) {
                if (src.charAt(j) == ',')
                  dX[i * srcLength + j] = 0;
                 else
                {
                  if (src.charAt(j) == patternRemoved.charAt(i))
                    dX[i * srcLength + j] = srcIndices[j];
                  else if (src.charAt(j) != patternRemoved.charAt(i))
                    dX[i * srcLength + j] = dX[i * srcLength + j-1];
                }
            }
             
        }
}

extern "C"
__global__ void ComputationdStructureOnGPUSerial(int srcLength,int numTokenSrc, int srcSructuresNum, int srcWordNum, char *src,int *srcStructuresSFIndices, int *srcIndices,int *srcStructureTokensSFIndices, int *srcStartIndices, int *srcStructureWordsSFIndices,int *srcStructureWordstokensSFIndices,int *srcTokensLengths,int totalLengthDistinct, char *patternRemoved, int *distinctSFIndices,int patternLength,int numPatternToken,int patternClustersNum,int patternWordNum,char *pattern, int *patternClustersSFIndices,int *patternIndices,int *patternTokensSFIndices,int *patternStartIndices,int *PatternWordsSFIndices,int *PatternWordstokensSFIndices,int *patternTokensLengths, int *dX,int *ResultFinal,float *TokensFinal,float *WordsTokensFinal1,float *WordsTokensFinal2,float *WordsFinal1,float *WordsFinal2,float *WordsFinal)
{

     int ix = blockIdx.x * blockDim.x + threadIdx.x;
     int distinctStart,distinctEnd,clStart,clEnd,strucStart,strucEnd,tokensStrucStart,tokensStrucEnd,tokensClStart,tokensClEnd,wordsClStart,wordsClEnd,wordsStrucStart,wordsStrucEnd,wordsTokensClStart,wordsTokensClEnd,wordsTokensStrucStart,wordsTokensStrucEnd;


     if(ix<patternClustersNum){
       distinctStart = distinctSFIndices[ix];
       distinctEnd = distinctSFIndices[ix+1];
       clStart = patternClustersSFIndices[ix];
       clEnd = patternClustersSFIndices[ix+1];
       strucStart = srcStructuresSFIndices[ix];
       strucEnd = srcStructuresSFIndices[ix+1];
       tokensStrucStart = srcStructureTokensSFIndices[ix];
       tokensStrucEnd = srcStructureTokensSFIndices[ix+1];
       tokensClStart = patternTokensSFIndices[ix];
       tokensClEnd = patternTokensSFIndices[ix+1];
       wordsClStart = PatternWordsSFIndices[ix];
       wordsClEnd = PatternWordsSFIndices[ix+1];
       wordsStrucStart = srcStructureWordsSFIndices[ix];
       wordsStrucEnd = srcStructureWordsSFIndices[ix+1];
       wordsTokensClStart = PatternWordstokensSFIndices[ix];
       wordsTokensClEnd = PatternWordstokensSFIndices[ix+1];
       wordsTokensStrucStart = srcStructureWordstokensSFIndices[ix];
       wordsTokensStrucEnd = srcStructureWordstokensSFIndices[ix+1];
levenshteinDistance(srcLength,patternRemoved, distinctStart, distinctEnd,pattern,clStart,clEnd, src,srcIndices,strucStart, strucEnd,tokensStrucStart,tokensStrucEnd,tokensClStart,tokensClEnd,wordsClStart,wordsClEnd,wordsStrucStart,wordsStrucEnd,wordsTokensClStart,wordsTokensClEnd,wordsTokensStrucStart,wordsTokensStrucEnd,dX,ResultFinal,TokensFinal,WordsTokensFinal1,WordsTokensFinal2,WordsFinal1,WordsFinal2,WordsFinal);

 

     }



}

it gives the following error:

Executing
nvcc -m64 -ptx D:\NetBeanProjects\OntologyThresholdSerial2023Test\src\ontologythresholdserial2023test\OntologyThresholdSerial2023.cu -o D:\NetBeanProjects\OntologyThresholdSerial2023Test\src\ontologythresholdserial2023test\OntologyThresholdSerial2023.ptx
nvcc process exitValue 1
errorMessage:
D:/NetBeanProjects/OntologyThresholdSerial2023Test/src/ontologythresholdserial2023test/OntologyThresholdSerial2023.cu(6): error: expression must have class type

D:/NetBeanProjects/OntologyThresholdSerial2023Test/src/ontologythresholdserial2023test/OntologyThresholdSerial2023.cu(10): error: expression must have class type

Exception in thread “main” java.io.IOException: Could not create .ptx file: D:/NetBeanProjects/OntologyThresholdSerial2023Test/src/ontologythresholdserial2023test/OntologyThresholdSerial2023.cu(6): error: expression must have class type

D:/NetBeanProjects/OntologyThresholdSerial2023Test/src/ontologythresholdserial2023test/OntologyThresholdSerial2023.cu(10): error: expression must have class type

D:/NetBeanProjects/OntologyThresholdSerial2023Test/src/ontologythresholdserial2023test/OntologyThresholdSerial2023.cu(10): error: expression must have class type

D:/NetBeanProjects/OntologyThresholdSerial2023Test/src/ontologythresholdserial2023test/OntologyThresholdSerial2023.cu(12): error: expression must have class type

D:/NetBeanProjects/OntologyThresholdSerial2023Test/src/ontologythresholdserial2023test/OntologyThresholdSerial2023.cu(10): error: expression must have class type

D:/NetBeanProjects/OntologyThresholdSerial2023Test/src/ontologythresholdserial2023test/OntologyThresholdSerial2023.cu(12): error: expression must have class type

D:/NetBeanProjects/OntologyThresholdSerial2023Test/src/ontologythresholdserial2023test/OntologyThresholdSerial2023.cu(12): error: expression must have class type

5 errors detected in the compilation of “C:/Users/COMPUT~1/AppData/Local/Temp/tmpxft_00001b9c_00000000-10_OntologyThresholdSerial2023.cpp1.ii”.

outputMessage:
OntologyThresholdSerial2023.cu

D:/NetBeanProjects/OntologyThresholdSerial2023Test/src/ontologythresholdserial2023test/OntologyThresholdSerial2023.cu(12): error: expression must have class type

5 errors detected in the compilation of “C:/Users/COMPUT~1/AppData/Local/Temp/tmpxft_00001b9c_00000000-10_OntologyThresholdSerial2023.cpp1.ii”.

at ontologythresholdserial2023test.ParallelLevenstein.preparePtxFile(ParallelLevenstein.java:130)
at ontologythresholdserial2023test.ParallelLevenstein.<init>(ParallelLevenstein.java:79)
at ontologythresholdserial2023test.OntologyThresholdSerial2023Test.main(OntologyThresholdSerial2023Test.java:426)

D:\NetBeanProjects\OntologyThresholdSerial2023Test\nbproject\build-impl.xml:1355: The following error occurred while executing this line:
D:\NetBeanProjects\OntologyThresholdSerial2023Test\nbproject\build-impl.xml:961: Java returned: 1
BUILD FAILED (total time: 3 seconds)

the error : error: expression must have class type, it is from src.charAt(j) because it is defined as a pointer in the device function. When I search for the error,

it needs the object not the pointer. how to solve this, please?

Knowing that I have used src.charAt(j) inside global function in another kernel, it succeeds.
extern “C”
global void ComputationdStructureOnGPUParallel

correct. This is a C++ programming error, it has nothing to do with CUDA. You’re evidently porting some code from java here, incorrectly.

Instead of src.charAt(j), try using src[j]. I recommend that you learn basics of C++ programming before working with CUDA.

sorry Mr.Robert. Really I sent the email by mistake. It is a java code.