在处理单独的.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
中?该文件中不需要它。只在头文件中包含所需内容。虽然这是代码的问题,但这不是问题中语法错误的原因。非常感谢。这就成功了。现在一切都很好。