Dies ist der Fehler, den ich erhalte, wenn ich versuche, Code zu kompilieren, der taucs (nicht meinen Code) verwendet:
%Vor%wat? Es widerspricht sich selbst?
Nachdem ich mich eingeklemmt habe, habe ich einen Testheader erstellt und eine widersprüchliche Definition eingefügt, nur um sicherzustellen, dass ich recht hatte:
In Datei testit.h:
%Vor%In der Datei somethingselse.h:
%Vor%Natürlich bekomme ich:
%Vor%Oder wenn ich dies in testit.h habe:
%Vor%Die Zeilennummer ist immer anders - eine Deklaration kann nicht mit sich selbst kollidieren. Ich verstehe es nicht. Wer hat das jemals gesehen?
Ist der einzelne Header in mehreren Quelldateien enthalten? Wenn ja, müssen Sie es wie folgt in "include guards" einfügen:
%Vor%In diesem Beispiel geben Sie 2 Deklarationen von foobar. Der Compiler weiß nicht, welchen er wählen soll - also wird er mit einer widersprüchlichen Deklaration aussortiert. Sie können dasselbe nicht zweimal deklarieren.
Wiederholen Sie die Definition nicht. C ++ ermöglicht, dass eine Definition nur einmal angezeigt wird. Was Sie tun können, ist eine Deklaration zu wiederholen.
A typedef
ist immer eine Definition. Also das erste, was ich empfehlen würde, geben Sie der struct
richtig einen Namen (und da dies C ++ ist, fügt ein typedef keinen Nutzen, also einfach die Typedef fallen lassen):
Als nächstes sollte das in genau einer Datei sein. Wenn Sie Dateien haben, die nur Zeiger auf foobar verwenden, können Sie die Deklaration wiederholen (nur nicht die Definition):
%Vor%Ich hatte das gleiche Problem mit meinem Code und es war nicht doppelte Deklaration eines Typs. PC-Lint beklagte sich über den gleichen Typdef, der in gemischtem C- und C ++ - Code verwendet wurde. Ich könnte das beheben, indem ich die gleiche Deklaration in C und C ++ Dateien vermeide. Hoffe das hilft jemandem.