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

您在使用MyCls2两个整数的构造函数的定义中缺少函数体。

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 回答