2

私を助けてくれてありがとう^^私の問題は解決しました!

C++言語を使用して内部クラスでSingletonを使用すると問題が発生します。私を助けてください。私の悪い英語を申し訳ありません。

class A: public AA
{
    class InnerA
    {
        private:
            static InnerA* _innerA;
        public:
            ~InnerA();
            void Release();

            static InnerA* GetInstance()
            {
                if (_innerA == NULL)
                {
                    static InnerA static_instance;
                    _innerA = &static_instance;
                }
                return _innerA ;
            };
.....

コンパイル後にコンソールに次のエラーが表示されます。

undefined reference to `A::InnerA::_innerA'

以下のコードのようにも変更しますが、それでも上記のエラーが発生します。

class A: public AA
    {
        class InnerA
        {
            private:
                static InnerA* _innerA;
            public:
                ~InnerA();
                void Release();

                static InnerA* GetInstance()
                {
                    if (A::InnerA::_innerA == NULL)
                    {
                        static A::InnerA::_innerA static_instance;
                        _A::InnerA::_innerA = &static_instance;
                    }
                    return A::InnerA::_innerA;
                };
    .....

私を助けてください !!!どうもありがとう

4

4 に答える 4

2

クラスのすべての静的データ メンバーは、どこかで定義する必要があります。以下を .cpp ファイルに入れます。

A::InnerA *A::InnerA::_innerA;

しかし、実際にその静的ポインタが必要なのでしょうか? 次のようにコードを単純化できます。

class A: public AA
{
    class InnerA
    {
        public:
            ~InnerA();
            void Release();

            static InnerA* GetInstance()
            {
                static InnerA static_instance;
                return &static_instance;
            }
.....

そうすれば、静的メンバーの定義は必要ありません。

于 2013-04-16T12:19:26.587 に答える
0

あなたのクラスA実装ファイルでは、\のようなものを書く必要があります

A::InnerA *A::InnerA::_innerA;

メンバーの定義を完了します。ヘッダーでは、メンバーを宣言するだけで、定義はしません。

于 2013-04-16T12:23:22.167 に答える
0

常に静的データメンバーを定義しています。class Aこれを main の前、定義のすぐ下に置きます。

A::InnerA *A::InnerA::_innerA;
于 2013-04-16T12:20:44.717 に答える