質問

MSVC ++ 6.0でこのシンプルなクラスを作成しました

class Strg
{
public:
    Strg(int max);
private:
    int _max;
};


Strg::Strg(int max)
{
  _max=max;
}

で使用すればいいですね:

main()
{
  Strg mvar(10);
}

しかし今、私が別のクラスでそれを使用する場合:

class ok
{
public:
    Strg v(45);
};

メッセージエラーが発生します:エラーC2059:構文エラー:「定数」

もっと教えてください。

正しい解決策はありません

他のヒント

あるべきです:

class ok
{
public:
    Strg v;
    ok() : v(45) {}
};

デフォルトのコンストラクターを持たない非静的なメンバー変数(この場合はV)は使用して初期化する必要があります 初期化リスト. 。一方、関数(メインなど)では、通常のコンストラクターの構文を使用できます。

コンパイラが不平を言っているのは、Tonがクラスメンバーをどのようにインスタンス化するかについての指示を提供しようとしていることです v クラスの定義内では、許可されていません。

インスタンスする場所 v Contructor内またはコンストラクターの初期化リストにあります。例えば:

内部コンストラクター:

class ok
{
public:
    Strg v;
    ok() {
        v = Strg(45);
    }
};

初期化リストで:

class ok
{
public:
    Strg v;
    ok() : v(45) {}
};

それを行う正しい方法は最後のものです(そうでなければ、 v また、デフォルトのコンストラクターが必要であり、2回初期化されます)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top