2014-09-25 41 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