2013-03-13 3 views
6

ho un problema durante tipo di ritorno è la strutturastruttura non nomina un tipo in C++

Example.h 

class Example { 
private: 
    typedef struct connection_header { 
     string url; 
     string method; 
    }; 

    static connection_header get_connection_header(); 
}; 

Example.cpp 
connection_header Example::get_connection_header() { 
    return NULL; 
} 

sto ottenendo 'connection_header' does not name a type

Posso sapere il motivo per cui è questo errore

+0

Il tuo prossimo errore sarà probabilmente "nessuna conversione da int a connection_header". Che tipo è 'NULL'? –

+0

@PeterWood Grazie per la notifica ero da java quindi di solito lo possiamo fare.e ho corretto quell'emissione – Kathick

risposta

8

Si utilizza typedef senza dare un nome al tipo. Basta inserire il typedef, non è necessario qui:

struct connection_header { 
    string url; 
    string method; 
}; 

Avanti, connection_header è dichiarata all'interno della classe Example, quindi è necessario qualificare completamente il suo nome nella realizzazione, quando si tratta di un tipo di ritorno:

Example::connection_header Example::get_connection_header() 
+0

Non penso che questo sia un buon consiglio in C++, vorrai che le strutture si comportino come classi, senza la necessità di digita la parola chiave 'struct' davanti al nome dell'oggetto su tutto il plac. – Lundin

+0

@Lundin non è dappertutto. Questa è la dichiarazione effettiva della 'struct'. – juanchopanza

+0

Ma quando si usa la struct è necessario digitare 'struct connection_header' poiché connection_header non è un tipo, ma un tag struct. – Lundin

1

Primo, in C++ (ma non C) ogni struct o class nomi un tipo. Quindi, se si dichiara uno struct connection_header, si ottiene anche un tipo connection_header, quindi è possibile dichiarare in seguito connection_header var alcune variabili.

Quindi, typedef entrambi in C e C++ richiede un tipo e un nome. Per esempio:

typedef long my_number_type; 

dichiara my_number_type come sinonimo di long

Così come altri hanno sottolineato, far cadere il typedef

2

Prova sottostante Codice in cpp file, aggiungere Example:: prima connection_header:

Example::connection_header Example::get_connection_header() { 
    return NULL; 
} 

connection_header definito all'interno di Example quindi dovresti dargli il suo ambito di definizione.

Inoltre, la parola chiave typedef verrà ignorata in C++. Puoi ometterlo