0

ヘルプ!C++ は初めてです... このヘッダー ファイルを修正するにはどうすればよいですか?

#pragma once
class MyCls2
{
private:
    int _i, _j;
public:
    MyCls2(int i, int j) : _i(i), 
                            _j(j)
    MyCls2(); // error: expected a '{'
    ~MyCls2(void);
};

これは、MS VC 2010 のエラーです。

エラー: '{' が必要です


助けてくれてありがとう、私は今欲しいものを手に入れました:

.h:

#pragma once
class MyCls2
{
private:
    int _i, _j;
public:
    MyCls2(int i, int j) ;
    MyCls2();
    ~MyCls2(void);
};

.cpp:

#include "StdAfx.h"
#include "MyCls2.h"


MyCls2::MyCls2()
{
}

MyCls2::MyCls2(int i, int j) : _i(i), 
    _j(j)
{
}
MyCls2::~MyCls2(void)
{
}
4

4 に答える 4

5

初期化子リストを使用してコンストラクター定義を提供しています。したがって、{}他の(メンバー)関数と同様に必要です。

MyCls2(int i, int j) : _i(i), 
                       _j(j) {} // Missing the opening and closing braces
于 2012-04-14T15:08:07.870 に答える
3

MyCls22 つの int を取るコンストラクターの定義に関数本体がありません。

MyCls2(int i, int j) : _i(i), 
                        _j(j) {}

イニシャライザ リストは、コンストラクタ自体の一部であると考えてください (宣言ではなく定義)。関数の定義の一部をどこかに持ち、別の部分を別の場所に持つことはできません。

ヘッダーに初期化子リストが必要な場合は、上記のように、残りの定義 (コンストラクター本体) もヘッダーに必要です。
ヘッダーに定義を入れたくない場合は、初期化子リストをヘッダーに入れずに、実装ファイルに入れます。

//header
  MyCls2(int i, int j);
// implementation

MyCls2::MyCls2(int i, int j) : _i(i), _j(j)
{
   // constructor body
}
于 2012-04-14T15:08:13.100 に答える
1

交換

MyCls2(int i, int j) : _i(i), 
                        _j(j)

MyCls2(int i, int j) : _i(i), _j(j) { }

コンストラクターには、空のボディであってもボディが必要です。

于 2012-04-14T15:08:33.397 に答える
1

コンストラクターのブレース:

MyCls2(int i, int j) : _i(i), 
                            _j(j) {}
于 2012-04-14T15:09:33.710 に答える