Guten Abend :)g ++ Header enthalten: noch keine Definition
Ich spiele mit g ++ und Makefiles herum. Ich habe zu diesem Punkt gekommen:
foo.h:
#ifndef _FOO_H_
#define _FOO_H_
#include "bar.h"
class foo {
private:
bar something;
public:
bool start();
bool stop();
};
#endif // _FOO_H_
foo.h schließlich in meiner Haupt-CPP-Datei enthalten ist, so dass ich die Dinge in Bewegung setzen kann durch lostelefonieren/Stopp.
void somewhere() {
foo* hihi = new foo;
hihi->start();
delete hihi;
}
Dann gibt es bar.h:
#ifndef _BAR_H_
#define _BAR_H_
class bar {
};
#endif // _BAR_H_
g ++ nicht es scheint jedoch zu mögen:
g++ (some_flags) -c main.cpp
In file included from main.cpp:2:
foo.h:8: error: ‘bar’ does not name a type
Ich bin mit Makefiles, und versucht, eine Kombination aus Dinge wie:
main.o: main.cpp foo.h bar.h
Auch wenn ich nicht denke, dass ich bar.h hier hinzufügen sollte, sollte es nicht in foo.h genug sein?
Um zu klären, dies grob ist, wie es jetzt Set up (ja, ich weiß, dass dies in einer effizienteren Weise getan werden kann):
main.o: main.cpp foo.h
$(CC) $(CFLAGS) -c main.cpp
foo.o: foo.h foo.cpp
$(CC) $(CFLAGS) -c foo.cpp
bar.o: bar.h bar.cpp
$(CC) $(CFLAGS) -c bar.cpp
Was ist los? Ich denke, dass es etwas ist, was ich an g ++ vermisse und die Art und Weise, wie es Header behandelt, schließe mich bitte in die richtige Richtung!
bearbeiten - fand die Lösung:
Doh! Ich fühle mich jetzt dumm. War mit boost :: asio rum und irgendwie vergaß ich noch das oben auf meine Header irgendwo: mit boost :: asio :: ip :: tcp;
Sagen wir einfach, es gibt eine boost :: asio :: ip :: tcp :: bar Funktion: D
Na ja, trotzdem danke!
Sind Sie sicher, dass es die richtige bar.h? GCC 3.4.5 beklage das nicht für mich. –
ein Ratschlag. * Nie * lege eine using-Direktive in eine Kopfzeile. In einer CPP-Datei ist das in Ordnung, aber in einer Kopfzeile verlangst du nur, dass diese Art von Problem auftritt. –
@Evan: Ich werde versuchen, es im Kopf zu behalten, danke. –