2013-03-13 11 views
6

ich ein Problem bekommen, während Rückgabetyp Struktur istStruktur hat keinen Typ in c nennen ++

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; 
} 

Ich erhalte 'connection_header' does not name a type

kann ich wissen, warum dieser Fehler ist

+0

Ihr nächster Fehler wird wahrscheinlich 'keine Konvertierung von int zu connection_header'. Welcher Typ ist 'NULL'? –

+0

@PeterWood Vielen Dank für die Benachrichtigung, die ich von Java war, so können wir das normalerweise tun.und ich reparierte das Issue – Kathick

Antwort

8

Sie verwenden typedef ohne dem Typ einen Namen zu geben. Gerade die typedef fallen, ist es hier nicht erforderlich:

struct connection_header { 
    string url; 
    string method; 
}; 

Als nächstes connection_header innerhalb der Example Klasse deklariert, so müssen Sie in vollem Umfang seinen Namen in der Umsetzung qualifizieren, wenn es ein Rückgabetyp:

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

Ich denke nicht, dass das gute Beratung in C++ ist, Sie werden Strukturen wie Klassen benehmen müssen, ohne zu müssen Geben Sie das Schlüsselwort 'struct' vor dem Objektnamen auf der ganzen Seite ein. – Lundin

+0

@Lundin es ist nicht überall. Dies ist die eigentliche Deklaration der 'struct'. – juanchopanza

+0

Aber wenn Sie die Struktur verwenden, müssen Sie 'struct connection_header' eingeben, da connection_header kein Typ, sondern ein struct-Tag ist. – Lundin

1

Zuerst in C++ (aber nicht C) jede struct oder class nennt einen Typ. Wenn Sie also einen struct connection_header deklarieren, erhalten Sie auch einen connection_header Typ, so dass Sie später connection_header var eine Variable deklarieren können.

Dann benötigt typedef sowohl in C als auch in C++ einen Typ und einen Namen. Zum Beispiel:

typedef long my_number_type; 

erklärt my_number_type als Synonym für long

So wie andere darauf hingewiesen, fallen die typedef

2

unten Code Versuchen in cpp Datei, fügen Example:: vor connection_header:

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

ist definiert innerhalb Example, also sollten Sie ihm seinen Definitionsbereich geben.

Auch das Schlüsselwort typedef wird in C++ ignoriert. Sie können es weglassen