0

console.h で静的変数を宣言し、console.cpp で定義しようとしています。変数を呼び出す行は次のとおりです。

     ok = CheckIoEditMinMax(0,Console::_tabsize, curpos, 0, insert,
     20-Console::_tabsize,20, offset) && ok;

私はそれを渡すことができたことを知っていますが、コンパイラは私がやっている方法を好きではありません. たとえば、次のように宣言しました。

/*Edited*/
namespace cio{
  class Console{ 
    public:  
    static unsigned int _tabsize; //Under public so it can be reached by the main.
                                  //inside the console class in cio namespace
    };
}    

次に、cpp ファイルで次のように定義します。

/*Edited - Also No it is not Const */
namespace cio{
   unsigned int Console::_tabsize = 4;
}

しかし、コンパイラはまだこれを気に入らず、次のように言っています。

console.cpp:8:32: error: âunsigned int cio::Console::_tabsizeâ is not a 
                  static member of âclass cio::Consoleâ

なぜこれを行うのか、どこでそれを理解するのかさえわかりません。また、コンパイラがこれを言うのは少し奇妙だと思いませんか?

4

1 に答える 1

2

static指定子を含める必要があるのは、メンバー変数の宣言だけです。

struct Foo
{
    static int value_;
};

// static specifier cannot be used here. 
int Foo::value_ = 1;

この場合、 if_tabsizeが変更されない場合は、クラス定義でそれを宣言してconst値を割り当てることができます。そうでない場合は、定義を提供する必要はありません。

struct Foo
{
    static const int value_ = 1;
};
于 2013-10-07T20:49:04.257 に答える