“error C2533: 构造函数不能有返回类型”,怎么回事?

sleepingboy 2002-12-17 02:22:44
VC.NET下

error C2533: 构造函数不能有返回类型

把函数里的代码注释掉也没用。

class RSBase
{
public:
RSBase(void);
virtual ~RSBase(void);

int m_nTopLeftX;
int m_nTopLeftY;
int m_nLength;

bool m_bMoveLeft;
bool m_bMoveRight;
bool m_bMoveDown;
bool m_bDeformation;

int m_nDeformCount;
RSArr **m_pDefaultRS;
RSArr *m_pCurrentRS;
};

class RSLeftL :
public RSBase
{
public:
RSLeftL(void);
~RSLeftL(void);

static const int m_nCount = 4;
};

RSLeftL::RSLeftL(void)
{ //这里是出现错误的行
m_nTopLeftX = 4;
m_nTopLeftY = 2;
m_nLength = 3;

m_bMoveLeft = false;
m_bMoveRight = false;
m_bMoveDown = false;
m_bDeformation = false;

m_nDeformCount = 0;

int init[4][3][3] = {
{0, 2, 0, 0, 2, 0, 0, 2, 2},
{0, 0, 2, 2, 2, 2, 0, 0, 0},
{2, 2, 0, 0, 2, 0, 0, 2, 0},
{0, 0, 0, 2, 2, 2, 2, 0, 0}
};

m_pDefaultRS = new RSArr*[m_nCount];
for(int i = 0; i < m_nCount; i++)
{
m_pDefaultRS[i] = new RSArr(m_nLength);
m_pDefaultRS[i]->Init(&init[i][0][0]);
}

m_pCurrentRS = m_pDefaultRS[0];
}
...全文
2260 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sleepingboy 2002-12-17
  • 打赏
  • 举报
回复
难道我要留起这100分?
cbc 2002-12-17
  • 打赏
  • 举报
回复
sleepingboy(狼神·固力)

呵呵,何必在这种问题上劳神那,
只要能解决问题不就行了
sleepingboy 2002-12-17
  • 打赏
  • 举报
回复
我快疯掉了。

用一堆一模一样的代码覆盖上去

什么问题都没有。

难道这就是传说中vs.net 2003要修正的1000多个bug之一?!
dupenf 2002-12-17
  • 打赏
  • 举报
回复
怪!怪!怪! 一个好来,一个坏。。。。。。。。。。
sleepingboy 2002-12-17
  • 打赏
  • 举报
回复
我拿出昨天备份的代码

这一部分跟今天的没有改变啊

编译成功

~~~~>.<~~~~
sleepingboy 2002-12-17
  • 打赏
  • 举报
回复
我新建一个项目

像joycenter(快乐之源)那样

把有关RSArr类的代码去掉再编译

也没有出错

但在原来的项目里,把这些代码注释掉后,问题依旧。
cbc 2002-12-17
  • 打赏
  • 举报
回复
CaptainIII(山上人)
基类中析构函数已经声明为析构
所以派生类中析构函数也必然是虚函数
virtual关键字可加可不加

现在怀疑楼主得vc编译器有问题
sleepingboy 2002-12-17
  • 打赏
  • 举报
回复
把析构函数的错误改正后

问题依旧-_-;
joycenter 2002-12-17
  • 打赏
  • 举报
回复
我用VC编怎么没有错?
/**h文件**/

class RSBase
{
public:
RSBase();
virtual ~RSBase();

int m_nTopLeftX;
int m_nTopLeftY;
int m_nLength;

bool m_bMoveLeft;
bool m_bMoveRight;
bool m_bMoveDown;
bool m_bDeformation;

int m_nDeformCount;

};

class RSLeftL : public RSBase
{
public:
RSLeftL();
~RSLeftL();

static const int m_nCount;// = 4;
};

//c++规定构造函数和析构函数是没有返回的

/****另外一个cpp文件***/

#include "stdafx.h"
#include "FileChanger.h"
#include "test1.h"


const int RSLeftL::m_nCount = 4;
RSLeftL::RSLeftL()
{ //这里是出现错误的行
m_nTopLeftX = 4;
m_nTopLeftY = 2;
m_nLength = 3;

m_bMoveLeft = false;
m_bMoveRight = false;
m_bMoveDown = false;
m_bDeformation = false;

m_nDeformCount = 0;


}
CaptainIII 2002-12-17
  • 打赏
  • 举报
回复
class RSLeftL :
public RSBase
{
public:
RSLeftL(void);
virtual ~RSLeftL(void);//<-!!!

static const int m_nCount = 4;
};

你的析构函数要“虚”,原因翻书吧
cbc 2002-12-17
  • 打赏
  • 举报
回复
呵呵,可能编译器问题
1.restart VC
2.restart pc
2.reinstall VC
3.reinstall os
sleepingboy 2002-12-17
  • 打赏
  • 举报
回复
(void)改为()没用。一样的意思。
cbc(逍遥子)的回复:
X( void ) { ... }; // OK, no return type declared

我的代码中,并没有返回类型类型啊。
难道是编译器的bug?
hnyyy 2002-12-17
  • 打赏
  • 举报
回复
下面一段话可供参考:

除了名字外,构造函数与析构函数的另一个特别之处是没有返回值类型,这与返回值类型为void的函数不同。构造函数与析构函数的使命非常明确,就象出生与死亡,光溜溜地来光溜溜地去。如果它们有返回值类型,那么编译器将不知所措。为了防止节外生枝,干脆规定没有返回值类型。(以上典故参考了文献[Eekel, p55-p56])
zhou80bin 2002-12-17
  • 打赏
  • 举报
回复
class RSBase
{
public:
RSBase();
virtual ~RSBase(void);

int m_nTopLeftX;
int m_nTopLeftY;
int m_nLength;

bool m_bMoveLeft;
bool m_bMoveRight;
bool m_bMoveDown;
bool m_bDeformation;

int m_nDeformCount;
RSArr **m_pDefaultRS;
RSArr *m_pCurrentRS;
};

class RSLeftL :
public RSBase
{
public:
RSLeftL(void);
~RSLeftL(void);

static const int m_nCount = 4;
};

RSLeftL::RSLeftL()
{ //这里是出现错误的行
m_nTopLeftX = 4;
m_nTopLeftY = 2;
m_nLength = 3;

m_bMoveLeft = false;
m_bMoveRight = false;
m_bMoveDown = false;
m_bDeformation = false;

m_nDeformCount = 0;

int init[4][3][3] = {
{0, 2, 0, 0, 2, 0, 0, 2, 2},
{0, 0, 2, 2, 2, 2, 0, 0, 0},
{2, 2, 0, 0, 2, 0, 0, 2, 0},
{0, 0, 0, 2, 2, 2, 2, 0, 0}
};

m_pDefaultRS = new RSArr*[m_nCount];
for(int i = 0; i < m_nCount; i++)
{
m_pDefaultRS[i] = new RSArr(m_nLength);
m_pDefaultRS[i]->Init(&init[i][0][0]);
}

m_pCurrentRS = m_pDefaultRS[0];
}
c++规定构造函数和析构函数是没有返回的
denis95 2002-12-17
  • 打赏
  • 举报
回复
在函数声明的时候可以指定参数为void,但是实现的时候不能

改成这样就行了

class RSLeftL :
public RSBase
{
public:
RSLeftL(void);//!!!ok
~RSLeftL(void);

static const int m_nCount = 4;
};

RSLeftL::RSLeftL()// !!!void not allowed here
{ //这里是出现错误的行
m_nTopLeftX = 4;
m_nTopLeftY = 2;
}
ruihuahan 2002-12-17
  • 打赏
  • 举报
回复
同意楼上
kangcau 2002-12-17
  • 打赏
  • 举报
回复
构造函数和析构函数没有返回值类型,从面向对象的角度上说,构造或者析够对象的时候不需要返回任何东西!
cbc 2002-12-17
  • 打赏
  • 举报
回复
构造函数没有返回类型
cbc 2002-12-17
  • 打赏
  • 举报
回复
Compiler Error C2533
'identifier' : constructors not allowed a return type

The specified constructor was declared with a return type.

A constructor does not return a value and has no return type. A return type of void is not allowed.

The following is an example of this error.

class X
{
public:
void X( void ) { ... }; // error, return type declared
X( void ) { ... }; // OK, no return type declared
};

sinqi 2002-12-17
  • 打赏
  • 举报
回复
同意楼上的意见,将(void)改为()试一下。
加载更多回复(1)
《概率论与数理统计》是理工科大学中的一门重要基础课程,它结合了概率论的基本理论与统计学的方法,用于分析和处理随机现象。第二版的完整版多媒体教学系统旨在通过丰富的教学资源和互动体验,帮助学生深入理解和掌握这门学科的核心概念。 一、概率论基础 概率论是研究随机事件及其规律性的数学理论,主要包括以下几个关键概念: 1. 随机试验:概率论的研究对象,如掷骰子、抽卡等。 2. 样本空间:所有可能结果的集合。 3. 事件:样本空间的子集,代表某种特定的结果。 4. 概率:事件发生的可能性,通常介于0和1之间,表示为P(A)。 5. 条件概率:在已知某个事件发生的情况下,另一个事件发生的概率。 6. 乘法法则和加法法则:用于计算两个独立或不独立事件的概率。 二、概率分布 1. 离散概率分布:如二项分布、泊松分布、几何分布、超几何分布等,用于描述离散随机变量的分布情况。 2. 连续概率分布:如均匀分布、正态分布、指数分布等,适用于连续随机变量。 三、统计学基础 1. 参数估计:通过样本数据估计总体参数,如均值、方差等。 2. 抽样分布:统计量在多次重复抽样下的分布情况。 3. 点估计和区间估计:给出参数的一个估计值或一个估计范围。 4. 假设检验:检验关于总体参数的假设是否成立,如t检验、卡方检验、F检验等。 5. 回归分析:研究两个或多个变量间的关系,预测一个变量基于其他变量的值。 四、数理统计方法 1. 最大似然估计:寻找使样本数据出现概率最大的参数估计方法。 2. 矩估计:通过总体矩与样本矩的关系来估计参数。 3. 正态分布的中心极限定理:大量独立随机变量的和近似服从正态分布,即使这些变量本身非正态。 4. 协方差和相关系数:衡量两个随机变量之间线性关系的强度和方向。 5. 方差分析(ANOVA):比较多个组别间的均值差异。 五、多元统计分析 1. 多元正态分布:多维空间中的正态分布,常用于多元线性回归。 2. 判别分析:根据已知分类的样本数据,建立判别函数,对新数据进行分类。 3. 聚类分析:将相似数据分组,揭示数据内在结构。 4. 主成分分析(PCA):降低数据维度,提取主要特征。 六、多媒体教学系统 该教学系统可能包含以下组成部分: 1. 视频讲座:专家讲解理论和例题,直观展示概念。 2. 动画演示:动态模拟随机过程,帮助理解概率模型。 3. 交互式练习:提供习题和答案,实时反馈学习效果。 4. 实验教程:设计数学实验,让学生亲手操作,加深理解。 5. 电子教材:包含文字、图表、案例等丰富内容,便于自主学习。 通过这个多媒体教学系统,学生不仅可以学习到概率论与数理统计的理论知识,还能通过实践应用和互动学习,提升解决实际问题的能力。

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧