2016-06-20 7 views
1

Ich habe timers.h-Datei wie folgt:unvollständigen Typ in verschachtelten name-Bezeichner in der Liste, Namespace

namespace timers { 
    struct timer { 
    std::string next; 
}; 

struct timers { 
    std::list<timers::timer> timers_list; 

    timers(); 
}; 

Wenn ich versuche, es mein Programm Whit kompilieren es zeigt:

modules/timers.h:23:13: error: incomplete type 'timers::timers' used in nested name specifier 

Warum kann ich nicht meine Struktur in next struct als Liste verwenden?

+0

Sie verwenden den gleichen Namen für Namespace und Struct, versuchen Sie eine zu ändern, macht es einen Unterschied? – thorsan

Antwort

2

namespace und struct haben den gleichen Namen. Wenn Sie timers:: eingeben, nimmt der Compiler an, dass sich das auf dem struct, nicht auf dem namespace (es handelt sich um eine Art des Namens Shadowing) bezieht.

Also, weil die Klasse timers ist noch nicht vollständig geschrieben, beschwert sich der Compiler über einen "unvollständigen" Typ.

Es ist eine schlechte Idee, ein class und namespace mit gleichen Namen zu haben, aber Ihr Code kann kompilieren, wenn Sie nur eingeben:

std::list<timer> timers_list; 

Da Sie den Namespace müssen nicht explizit, wenn Sie sich auf etwas in dasselbe.

+0

Oh, ja, danke das ist das Problem. – dragonn

Verwandte Themen