C ++错误:预期' {'

时间:2012-04-14 15:07:01

标签: c++

帮助! 我是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 个答案:

答案 0 :(得分:5)

您正在使用初始化列表提供构造函数定义。因此,它需要{}像任何其他(成员)函数一样。

MyCls2(int i, int j) : _i(i), 
                       _j(j) {} // Missing the opening and closing braces

答案 1 :(得分:2)

您在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
}

答案 2 :(得分:1)

替换

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

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

构造函数需要一个body,即使它是空的。

答案 3 :(得分:1)

构造函数的大括号:

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