20

私が抱えているこの問題を乗り越えることはできません。簡単な例を次に示します。

class x
{
    public:
    void function(void);

    private:
    static void function2(void);
};

void x::function(void)
{
    x::function2(void);
}

static void function2(void)
{
     //something
}

function2がプライベートであると文句を言うエラーが発生します。公開すると(実際にはやりたくない)、function2への未定義の参照に関するエラーが発生します。私は何が間違っているのですか?ありがとうございました!

4

2 に答える 2

36
  1. クラス内に関数宣言と定義の両方を含めることはできません。定義をクラスから移動するか、宣言を削除してください。

  2. ボイドをパラメータとして関数を呼び出すことはできません。これは宣言でのみ使用されます。

  3. クラス外の場合のfunction2の関数定義にはax::qualifierが必要であり、staticは2回目は必要ありません。


    class x
    {
        public:
            void function(void); 
        private:
            static void function2(void);
    };

    void x::function(void)
    { 
        x::function2(); 
    }

    void x::function2(void)
    {
    }
于 2010-03-22T00:15:33.837 に答える
3

function2で定義する必要があります

static void x::function2 (void)
{
    body
}

と同じようにx::function

更新:はい。クラスメソッドを定義するときに、静的でマークする必要はありません。

class x
{
 public:
   void function(void);

 private:
   static void function2(void);
}; //end of class

// here are definitions of members
static void x::function(void)
{
  x::function2();
}
static void x::function2(void)
{
//something
}
于 2010-03-22T00:08:29.423 に答える