- >必须指向class / struct / union / generic类型错误

时间:2012-02-13 23:11:22

标签: c++ multithreading

typedef struct{
    IMAGE *fuente;
    IMAGE *destino;
    int saltos;
} ARGTHREAD;

ARGTHREAD values;

DWORD WINAPI ProcessThread(LPVOID arg){

    int i,j,imageRows,imageCols,C,R;
    PIXEL *pfte,*pdst;
    PIXEL *v0,*v1,*v2,*v3,*v4,*v5,*v6,*v7;

    //memcpy(arg->destino, arg->fuente,sizeof(IMAGE)-sizeof(PIXEL *));

    imageRows = arg->fuente->infoheader.rows;//error here ->
    imageCols = arg->fuente->infoheader.cols;//error here ->

    //arg->destino->pixel=(PIXEL *)malloc(sizeof(PIXEL)*imageRows*imageCols);

    i=arg->saltos;//error here ->
    R=imageRows-1;
    C=imageCols-1;
    while(i<R){
                j=1;        
            while(j<C){
                pfte=arg->fuente->pixel+imageCols*i+j;//error here ->
                v0=pfte-imageCols-1;
                v1=pfte-imageCols;
                v2=pfte-imageCols+1;
                v3=pfte-1;
                v4=pfte+1;
                v5=pfte+imageCols-1;
                v6=pfte+imageCols;
                v7=pfte+imageCols+1;

                pdst=arg->destino->pixel+imageCols*i+j;//error here ->

            if(abs(blackandwhite(*pfte)-blackandwhite(*v0))>DIF ||
                    abs(blackandwhite(*pfte)-blackandwhite(*v1))>DIF ||
                    abs(blackandwhite(*pfte)-blackandwhite(*v2))>DIF ||
                    abs(blackandwhite(*pfte)-blackandwhite(*v3))>DIF ||
                    abs(blackandwhite(*pfte)-blackandwhite(*v4))>DIF ||
                    abs(blackandwhite(*pfte)-blackandwhite(*v5))>DIF ||
                    abs(blackandwhite(*pfte)-blackandwhite(*v6))>DIF ||
                    abs(blackandwhite(*pfte)-blackandwhite(*v7))>DIF){

                    pdst->red=0;
                    pdst->green=0;
                    pdst->blue=0;
                }

                else{
                    pdst->red=255;
                    pdst->green=255;
                    pdst->blue=255;
                }
                j++;        
            }
        i = i+numProc;
    }
}

这就是我创造的方式:

  

myThread = CreateThread(NULL,0,   (LPTHREAD_START_ROUTINE)ProcessThread,&amp; values,0,NULL);

我收到了很多这些错误,我无法弄明白为什么?

错误8错误C2228:'.cols'的左边必须有class / struct / union

2 个答案:

答案 0 :(得分:3)

arg是一个void*指针,如果没有先将其转换回相应的类型,则无法获取任何内容:

ARGTHREAD* arg_values = static_cast<ARGTHREAD*>(arg);
// use arg_values->...

答案 1 :(得分:0)

您的程序请求void*的元素,该元素不是类型(包含成员)。首先将其转换为您已通过的类型(ARGTHREAD),然后您可以将void*视为ARGTHREAD*