2014-09-25 5 views
1

포인터를 배우려고하는데이 오류가 발생합니다. 요청 헤더 파일 클래스를 변경해야합니까? 왜 내가 그런 실수를하는거야? 유형 오류 및 포인터 혼동

cannot convert `req' from type `Request' to type `Request *' 

이 오류는 논문 라인에서 어떤 일이 일어나고 :

//Store necessary information in a Request object for each request. 
Request req(url, request, 1); 

Request *reqq = req; //req points to the object 
list->Append(reqq); 

코드 :

void 
ClientThread(int request) 
{ 
    const int sz = 50; 
    char url[sz]; 

    FILE *fp = fopen("url.txt", "r"); 
    if (!fp) 
    printf(" Cannot open file url.txt!\n"); 
    else { 
    int pos = 0; 
    char c = getc(fp); 
    while (c != EOF || pos == sz - 1) { 
     if (c == '\n') { 
    url[pos] = '\0'; 
    serve(url); 
    pos = 0; 

    //Store necessary information in a Request object for each request. 
    Request req(url, request, 1); 

    Request *reqq = req; //req points to the object 
    list->Append(reqq); 

     } 
     else { 
    url[pos++] = c; 
     } 
     c = getc(fp); 
    } 
    fclose(fp); 
    } 
} 

내 request.h 파일은 다음과 같습니다

class Request 
{ 
public: 
    //constructor intializes request type 

    Request(char *u, int rqtID, int rqtrID); 
    char *url; 
    int requestID; 
    int requesterID; 

}

+1

'req'는'Request'입니다. 'reqq'는'Request'에 대한 포인터입니다. 하나에서 다른 하나로의 변환은 없습니다. – juanchopanza

+3

주소 연산자'&'는 객체를 포인터로 변환하는 데 사용됩니다 : '& req'. –

+1

@MarkRansom :'&'연산자는 객체를 포인터로 변환하지 않습니다. 그것은 객체의 주소 인 포인터 값을 산출합니다. –

답변

3

당신은 여기 address-of operator를 사용해야합니다 :이 경우 does not mean reference&

Request *reqq = &req; //req points to the object 
// -------------^ 

참고.

피연산자 일부 타입 T의 좌변 식이면

운영자 & 만들고 타입 T의 prvalue *를 반환한다.

1

req의 참조 번호는 &req을 사용하십시오. 포인터 유형은 객체가 아닌 포인터 값을 허용합니다.

Request *reqq = &req; //req points to the object