J'obtiens une erreur en essayant de compiler mon code en g ++ en utilisant la signature actuelle:
cannot declare member function static void Foo::Bar(std::ostream&, const Foo::Node*) to have static linkage
Ma question est double:
- Pourquoi ne compile-t-il pas de cette façon?
- Quelle est la bonne signature et pourquoi?
Les signatures ont toujours été ma mort lors de l'utilisation de C ++
Edit: Voici également le fichier d'en-tête de classe:
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
nulle part dans votre fragment de programme. Veuillez publier un programme complet et minimal qui démontre l'erreur que vous rencontrez. Un programme complet est un programme que nous pouvons compiler exactement tel quel et recevoir le même message d'erreur que vous. Un programme minimal est un avec chaque ligne sans rapport avec votre erreur supprimée. Le fragment de code que vous avez publié n'est ni complet ni minimal. Voir sscce.org pour plus d'informations.Réponses:
Je suppose que vous avez fait quelque chose comme:
Le "
static void Foo::Bar
" est incorrect. Vous n'avez pas besoin du deuxième "static
".la source