在处理单独的.cpp和.h文件中的类时,实现继承的正确方法是什么? 我是C++新手,我决定写一个简单的控制台游戏。我最初都是在main.cpp文件中编写的,但现在我决定将所有类拆分,以使其更易于阅读。我查阅了一些关于如何正确执行此操作的教程,但我似乎遇到了一个无法找到解决方案的错误

在处理单独的.cpp和.h文件中的类时,实现继承的正确方法是什么? 我是C++新手,我决定写一个简单的控制台游戏。我最初都是在main.cpp文件中编写的,但现在我决定将所有类拆分,以使其更易于阅读。我查阅了一些关于如何正确执行此操作的教程,但我似乎遇到了一个无法找到解决方案的错误,c++,class,inheritance,syntax,header,C++,Class,Inheritance,Syntax,Header,这里是“块”的基类。不同纹理的块从该基本块继承 这是头文件的代码: #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); vi

这里是“块”的基类。不同纹理的块从该基本块继承

这是头文件的代码:

#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);

};
以下是其中一个派生类的头的代码:

 #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 "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; }
  #include "clsBlockWeak.h"

BlockWeak::BlockWeak(int x, int y): BaseBlock(x,y){
        Appearance = "\xB1";
        IsActive = true;
    }
从这段代码中,我在派生类的头文件中得到了各种各样的错误,如:

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

然后在.cpp文件中,我得到:

-输入“int”意外 -发现意外的文件结尾

任何关于如何更正我的代码的信息都将不胜感激

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) {} 

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

您已经在标题中定义了
BlockWeak
的构造函数,然后再次在源代码中定义。如果没有继承和一个文件中的所有代码,这也是错误的。您得到的确切错误是什么?问题,并粘贴到编译器输出的确切错误中,包括错误的行号。如有必要,请在问题中的代码中指出这些行的位置。
inline
表示函数可能在多个翻译单元中具有定义。所有成员函数都是隐式
内联的
。它与函数调用的内联无关,在代码中到处散布它也没有意义。您需要按照每个文件中出现的顺序修复错误。一个非常小的问题,如缺少分号或不匹配的大括号,可能会导致大量不可理解的后续错误。无关:为什么
#将
包含在
clsBaseBlock.h
中?该文件中不需要它。只在头文件中包含所需内容。虽然这是代码的问题,但这不是问题中语法错误的原因。非常感谢。这就成功了。现在一切都很好。