Recibo un error al intentar compilar mi código en g ++ con la firma actual:
cannot declare member function static void Foo::Bar(std::ostream&, const Foo::Node*) to have static linkage
Mi pregunta es doble:
- ¿Por qué no se compila de esta manera?
- ¿Cuál es la firma correcta y por qué?
Las firmas siempre han sido la muerte para mí cuando uso C ++
Editar: Aquí también está el archivo de encabezado de clase:
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
ningún fragmento en su programa. Publique un programa completo y mínimo que demuestre el error que está teniendo. Un programa completo es aquel que podemos compilar exactamente como está y recibir el mismo mensaje de error que usted. Un programa mínimo es uno con cada línea no relacionada con su error eliminado. El fragmento de código que publicó no es completo ni mínimo. Ver sscce.org para más información.Respuestas:
Supongo que has hecho algo como:
El "
static void Foo::Bar
" es incorrecto. No necesitas el segundo "static
".fuente