Beim Versuch, meinen Code in g ++ mit der aktuellen Signatur zu kompilieren, wird eine Fehlermeldung angezeigt:
cannot declare member function static void Foo::Bar(std::ostream&, const Foo::Node*) to have static linkage
Meine Frage ist zweifach:
- Warum wird es nicht so kompiliert?
- Was ist die richtige Signatur und warum?
Signaturen waren immer der Tod von mir, wenn ich C ++ verwendete
Bearbeiten: Hier ist auch die Klassenheaderdatei:
class Foo {
public:
Foo();
~Foo();
bool insert(const Foo2 &v);
Foo * find(const Foo2 &v);
const Foo * find(const Foo2 &v) const;
void output(ostream &s) const;
private:
//Foo(const Foo &v);
//Foo& operator =(const Foo &v);
//Not implemented; unneeded
struct Node {
Foo2 info;
Node *left;
Node *right;
};
Node * root;
static bool insert(const Foo2 &v, Node *&p);
static void output(ostream &s, const Node *p);
static void deleteAll(Node *p);
Foo::Bar
nirgendwo in Ihrem Programmfragment. Bitte posten Sie ein vollständiges , minimales Programm, das den Fehler demonstriert, den Sie haben. Ein vollständiges Programm ist eines, das wir genau so kompilieren können, wie es ist, und die gleiche Fehlermeldung wie Sie erhalten. Ein minimales Programm ist eines, bei dem jede Zeile, die nicht mit Ihrem Fehler zusammenhängt, entfernt wurde. Das von Ihnen gepostete Codefragment ist weder vollständig noch minimal. Weitere Informationen finden Sie unter sscce.org .Antworten:
Ich vermute, Sie haben so etwas getan wie:
Das "
static void Foo::Bar
" ist falsch. Du brauchst nicht das zweite "static
".quelle