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];
}

解决方案 »

  1.   

    同意楼上的意见,将(void)改为()试一下。
      

  2.   

    Compiler Error C2533
    'identifier' : constructors not allowed a return typeThe 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
    };
      

  3.   

    在函数声明的时候可以指定参数为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;
    }
      

  4.   

    下面一段话可供参考:除了名字外,构造函数与析构函数的另一个特别之处是没有返回值类型,这与返回值类型为void的函数不同。构造函数与析构函数的使命非常明确,就象出生与死亡,光溜溜地来光溜溜地去。如果它们有返回值类型,那么编译器将不知所措。为了防止节外生枝,干脆规定没有返回值类型。(以上典故参考了文献[Eekel, p55-p56])
      

  5.   

    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++规定构造函数和析构函数是没有返回的
      

  6.   

    (void)改为()没用。一样的意思。
    cbc(逍遥子)的回复:
        X( void ) { ... };       // OK, no return type declared我的代码中,并没有返回类型类型啊。
    难道是编译器的bug?
      

  7.   

    呵呵,可能编译器问题
    1.restart VC
    2.restart pc
    2.reinstall VC
    3.reinstall os
      

  8.   

    class RSLeftL :
    public RSBase
    {
    public:
    RSLeftL(void);
    virtual ~RSLeftL(void);//<-!!! static const int m_nCount = 4;
    };你的析构函数要“虚”,原因翻书吧
      

  9.   

    我用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;
    }
      

  10.   

    CaptainIII(山上人) 
    基类中析构函数已经声明为析构
    所以派生类中析构函数也必然是虚函数
    virtual关键字可加可不加现在怀疑楼主得vc编译器有问题
      

  11.   

    我新建一个项目像joycenter(快乐之源)那样把有关RSArr类的代码去掉再编译也没有出错但在原来的项目里,把这些代码注释掉后,问题依旧。
      

  12.   

    我拿出昨天备份的代码这一部分跟今天的没有改变啊编译成功~~~~>.<~~~~
      

  13.   

    我快疯掉了。用一堆一模一样的代码覆盖上去什么问题都没有。难道这就是传说中vs.net 2003要修正的1000多个bug之一?!
      

  14.   

    sleepingboy(狼神·固力) 呵呵,何必在这种问题上劳神那,
    只要能解决问题不就行了