2013-03-13 21 views
6

pojawia się problem, podczas gdy typ zwracany jest strukturastruktura nie nazwę typu w 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; 
} 

jestem coraz 'connection_header' does not name a type

może wiem, dlaczego to jest błąd

+0

Twój następny błąd prawdopodobnie będzie "brak konwersji z int do connection_header". Jaki jest typ "NULL"? –

+0

@PeterWood Dzięki za powiadomienie byłem z java, więc zwykle możemy to zrobić. I naprawiłem to wydarzenie – Kathick

Odpowiedz

8

Używasz typedef bez podawania nazwy tego typu. Wystarczy upuścić typedef, to nie jest potrzebne tutaj:

struct connection_header { 
    string url; 
    string method; 
}; 

Dalej, connection_header jest zadeklarowana wewnątrz klasy Example, więc trzeba się w pełni zakwalifikować jej nazwę w realizacji, gdy jest to typ zwracany:

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

Nie sądzę, że jest to dobra rada w C++, będziesz chciał, aby struktury zachowywały się jak klasy, bez potrzeby wpisz słowo kluczowe "struct" przed nazwą obiektu w całym miejscu. – Lundin

+0

@Lundin to nie wszystko w każdym miejscu. Jest to rzeczywista deklaracja 'struct'. – juanchopanza

+0

Ale kiedy używasz struct, musisz wpisać 'struct connection_header', ponieważ connection_header nie jest typem, ale znacznikiem struct. – Lundin

1

Po pierwsze, w C++ (ale nie C) co struct lub class nazywa typ. Jeśli więc zadeklarujesz numer struct connection_header, otrzymasz również typ connection_header, aby później móc zadeklarować pewną zmienną.

Następnie, zarówno w C, jak i C++ potrzebny jest typ i nazwa. Na przykład:

typedef long my_number_type; 

deklaruje my_number_type jako synonim long

Tak jak inni wskazał, upuść typedef

2

Spróbuj poniżej kod w cpp pliku dodaj Example:: przed connection_header:

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

connection_header jest zdefiniowany wewnątrz Example, więc powinieneś nadać jej zakres definicji.

Również słowo kluczowe typedef zostanie zignorowane w C++. Możesz go pominąć: