2014-09-25 2 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 здесь:

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

Обратите внимание, что & в этом случае does not mean reference.

Если операнд именующее выражение некоторого типа T, оператор & создает и возвращает prvalue типа Т *.

1

Поставьте ссылку req, используя &req. Тип указателя принимает значение указателя, а не объект.

Request *reqq = &req; //req points to the object 
Смежные вопросы