Datum:
Hi, Ich versuche gerade ein Logging-Framework von http://www.drdobbs.com/embedded-systems/225700666 für den Keil Compiler für ARM zu portieren. Dieses Projekt lässt sich ohne Probleme mit g++ unter Linux compilieren. Leider scheitere ich mit dem Keil Compiler mit folgenden Fehlermeldungen:
logging/Logger.h(90): error: #70: incomplete type is not allowed logging/singleton.h(65): error: #70: incomplete type is not allowed logging/Logger.h(129): error: #70: incomplete type is not allowed |
Ich hab mir den Preprozessoroutput des g++ ausgeben lassen: http://www.pasteall.org/31617/cpp Das Problem scheint zu sein: In Zeile 232 wird der Typ loggingReturnType benötigt, der nur durch eine Forward Declaration aus Zeile 224 bekannt ist. Dieser Typ, wird als eine der letzten Befehle vor der main definiert, und zwar in Zeile 26383. Nun meine Frage, warum funktioniert das mit g++ und nicht mit dem Keil Compiler? Robert
Datum:
Vielleicht hilft das: http://stackoverflow.com/questions/10469896/error-... Falls der Beitrag nicht von Dir war ;-)
Datum:
;-)
Datum:
Und das ändern der Reihenfolge bringt nichts?
Datum:
Robert schrieb: > Nun meine Frage, warum funktioniert das mit g++ und nicht mit dem Keil > Compiler? Hmm, ich bin mir nicht sicher (das ist ein recht komplizierter Teil von C++), aber man möge mich korrigieren, wenn folgendes falsch ist: Wenn ich es richtig verstehe, müßte der Typ erst bei der Instanziierung und noch nicht bei der Definition des Templates vollständig sein, da er von einem Template-Argument abhängt. Nur unabhängige Typen müssen an der Stelle der Template-Definition vollständig sein, abhängige Typen erst bei der Instanziierung. Es müßte das sogenannte two-phase-lookup stattfinden, das im Keil-Compiler möglicherweise nicht oder falsch implementiert ist.