提问者:小点点

在单独的.cpp和.h文件中处理类时,实现继承的正确方法是什么?


我刚接触C++,为了练习,我决定编写一个简单的控制台游戏。我最初都是在main.cpp文件中编写的,但现在我决定将所有的类拆分,以便更容易阅读。我查阅了一些关于如何正确执行此操作的教程,但我似乎遇到了一个无法找到解决方法的错误。

这里是一个“块”的基类。不同纹理的块继承自此基块。

这是头文件的代码:

#pragma once
#include <iostream>

class BaseBlock { //Base block class
private:
    int PosX, PosY;
protected:
    std::string Appearance;
    bool        IsActive;

public:
    BaseBlock(int x, int y);

    virtual inline int          getX();
    virtual inline int          getY();
    virtual inline bool         getIsActive();
    virtual inline std::string  getAppearance();
    virtual inline void         setActive(bool isactive);

};

下面是它的.cpp文件:

 #include "clsBaseBlock.h"



    BaseBlock::BaseBlock(int x, int y) {
        PosX        = x;
        PosY        = y;
        Appearance  = ' ';
        IsActive    = false;
    }

    inline int          BaseBlock::getX()                   { return PosX; }
    inline int          BaseBlock::getY()                   { return PosY; }
    inline bool         BaseBlock::getIsActive()            { return IsActive; }
    inline std::string  BaseBlock::getAppearance()          { return Appearance; }
    inline void         BaseBlock::setActive(bool isactive) { IsActive = isactive; }

下面是其中一个派生类的头的代码:

 #pragma once
#include "clsBaseBlock.h"

class BlockWeak : public BaseBlock { // Third derived block class
public:
    BlockWeak(int x, int y) : BaseBlock(x, y) {} //Here is the inheritance
};

下面是它的.cpp文件:

  #include "clsBlockWeak.h"

BlockWeak::BlockWeak(int x, int y): BaseBlock(x,y){
        Appearance = "\xB1";
        IsActive = true;
    }

从这段代码中,我会在派生类的头文件中发现各种错误,比如:

-语法错误:“symbol”:成员函数定义应以“}”结尾-基/成员初始值设定项列表中尾随“char”非法

然后在.cpp文件中得到:

-键入“int”意外-找到意外的文件结尾

任何关于如何纠正我的代码的信息将非常感谢。


共1个答案

匿名用户

BlockWeak(int x, int y) : BaseBlock(x, y) {} //Here is the inheritance

不,不是。这里是继承:

class BlockWeak : public BaseBlock

下面是构造函数的完整定义,您也在.cpp文件中提供了该定义,因此可能违反了一个定义规则

BlockWeak(int x, int y) : BaseBlock(x, y) {} 

您可能应该删除从:开始的部分,包括{}并将其移动到定义中