2014-09-25 42 views
1

我想學習指針,我得到這個錯誤。我是否需要更改頭文件類Request?爲什麼我會收到這樣的錯誤?類型錯誤和指針混淆

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 2014-09-25 21:56:00

+3

運算符'&'的地址用於將對象轉換爲指針:'&req'。 – 2014-09-25 21:56:10

+1

@MarkRansom:'&'操作符不會將*對象轉換爲指針。它會產生一個指向對象地址的指針值。 – 2014-09-25 22:09:32

回答

3

這裏需要使用address-of operator

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

注意,在這種情況下does not mean reference&

如果操作數是某種類型T的左值表達式,操作者& 創建並返回類型T的prvalue *。

1

使用&req作爲參考req。指針類型接受指針值,而不是對象。

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