1. ホーム
  2. c++

[解決済み] 静的メンバ関数のエラー、正しいシグネチャの書き方は?

2022-04-23 11:33:47

質問

g++で現在の署名を使用してコードをコンパイルしようとするとエラーが発生します。

cannot declare member function static void Foo::Bar(std::ostream&, const Foo::Node*) to have static linkage

質問は2つあります。

  1. なぜこの方法ではコンパイルできないのですか?
  2. 正しい署名とその理由は?

C++を使うとき、シグネチャはいつも私の命取りになっています。

編集:こちらもクラスのヘッダーファイルです。

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);

解決方法は?

というようなことをしたのではないでしょうか?

class Foo
{
    static void Bar();
};

...

static void Foo::Bar()
{
    ...
}

の"です。 static void Foo::Bar は正しくありません。 2つ目の".は必要ありません。 static となります。