帮助! 我是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)
{
}
答案 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) {}