"Neudefinition von 'foo' als andere Symbolart"

Ich versuche zu überarbeiten und bringen-über einige alte code, und ich lief über so etwas wie dieses:

          struct foo;
typedef   struct foo *    foo;

Wenn Sie versuchen, um es zu kompilieren, bekomme ich die folgende Art von Fehlermeldung:

Source/Types/Types.h:27:18: error: redefinition of 'foo' as different kind of symbol
typedef   struct foo *    foo;
                 ^

Weiß jemand, was dies verursacht? Ich habe Sie nicht berührt, den code in eine lange Zeit, aber ich sicherlich erinnere mich an keinen Fehler in Bezug auf dass. Es ist einige der am core-code in der codebase, alles hängt davon ab; ich sehe nicht, wie könnte ich möglicherweise übersehen, wie einen eklatanten Fehler, wenn es ist in der Tat ein Fehler. Da die original - foo ist ein "struct tag" (nur eine vernünftige Referenz nach der struct keyword), wie kann es einen Konflikt mit meinem neuen foo typedef schreiben?

Edit 1: Hier ist die gesamte tatsächliche Datei, vielleicht bin ich etwas fehlt, aber es scheint ziemlich geradlinig. Es sichert eine tötete der gleiche Fehler oben beschrieben, für jeden Typ:

# if !defined(TYPE_DECLARATIONS)
#   define    TYPE_DECLARATIONS

# include "Core.h"
# warning "in Core.h"

static int class = 0; //to prove I’m not compiling as C++

          struct e(fork);
typedef   struct e(fork)*                 e(fork);

          struct e(execution);
typedef   struct e(execution)*            e(execution);


          struct e(thing);
typedef   struct e(thing)                 e(thing);

          struct e(typeRepresentation);
typedef   struct e(typeRepresentation)*   e(typeRepresentation);


struct e(typeRepresentation) {
  void *                      family;
  char                        name[64]; };

struct e(thing) {
  void * const                pointer;
e(typeRepresentation) const   isa; };


# endif //!defined(TYPE_DECLARATIONS)

(Auch, ignorieren die e() makro; es ist ein noop in diesem Fall).

  • Code kompiliert, kein problem für mich. Welchen compiler benutzt du? Ich bin auf gcc 4.3.3
  • clang --version #=> 2.8
  • Es wirklich scheint, dass Sie versuchen zu kompilieren, als C++. Versuchen Sie int class; irgendwo passend und überprüfen Sie, ob der compiler meckert 🙂
  • static int class = 0; im globalen Bereich rechts vor dem anderen code führt keine neuen Fehler
InformationsquelleAutor ELLIOTTCABLE | 2011-03-04
Schreibe einen Kommentar