从派生类调用基类函数时出现的问题 我现在对C++非常陌生,我已经开始学习如何在路径查找算法中使用指针。
我在调用从基类派生的类中的函数时遇到问题 导致问题的具体代码是:从派生类调用基类函数时出现的问题 我现在对C++非常陌生,我已经开始学习如何在路径查找算法中使用指针。,c++,derived-class,private-members,C++,Derived Class,Private Members,我在调用从基类派生的类中的函数时遇到问题 导致问题的具体代码是: FreeTile *tempPointer = new FreeTile(); cout<<tempPointer->getFree()<<endl; mapp[i][j] = tempPointer; 磁贴标题为: #ifndef TILE_H #定义TILE_H class Tile { public: Tile(); virtual ~Tile();
FreeTile *tempPointer = new FreeTile();
cout<<tempPointer->getFree()<<endl;
mapp[i][j] = tempPointer;
磁贴标题为:
#ifndef TILE_H
#定义TILE_H
class Tile
{
public:
Tile();
virtual ~Tile();
bool getFree();
void setFree(bool bo);
protected:
private:
bool free;
};
#endif // TILE_H
#endif // FREETILE_H
最后,为磁贴创建cpp文件:
#include "Tile.h"
#include <iostream>
using namespace std;
bool free;
Tile::Tile()
{
cout<<"Constructor Called"<<endl;
}
Tile::~Tile()
{
//dtor
}
bool getFree(){
return free;
}
void setFree(bool bo){
free = bo;
}
#包括“Tile.h”
#包括
使用名称空间std;
无布尔;
Tile::Tile()
{
cout在Cpp文件中将“bool getFree()”重命名为
“布尔平铺::getFree()”
在您的实现中,该函数只是一个常规的c gloabl函数。
在固定版本中,它是您在头文件中声明的函数的类函数实现
也
首先在你的互动程序中有一个私有变量“bool free”
在cpp文件中有一个全局变量“bool free”
这令人困惑。
可能要删除您在cpp文件中声明的一个
想要更深入的解释吗?是的!我的第一个答案!
更深入的解释:
您在类Tile中声明的函数未定义(仅声明),因为您没有在cpp文件中的函数定义之前添加“Tile::”(即,您没有定义作用域)。
您在cpp文件中编写的函数在cpp文件中定义和声明,因此只有在cpp文件中在它之后编写的函数才能调用它(与c的工作原理相同)。
可能在编写函数时,它不知道“free”是什么,对吧?因为它不是一个类函数。因此,您添加了全局“bool free”,但这是一个完全不同的变量。
很乐意帮忙!
别忘了将此标记为已回答!这里有很多错误。您已将free
定义为全局变量,并将getFree
和setFree
定义为全局变量。在FreeTile
中,您的变量free
将从Tile
中隐藏变量free
,并且可能不是如果您想从代码< >瓦特<代码> > < FruteLe>代码>考虑在瓦特<代码> > < <代码>私下<代码>,而不是在<代码> FruteLe<代码>中声明它。也许更好的是<代码> FruteLe<代码>访问<代码>私有< /代码> COD> COD。e> free
通过getFree
和setFree
与其他人一样。我从FreeTile中删除了free变量,因此它仅在Tile类中,我还将其更改为protected。虽然我可以看出这是多么有益,但调用getFree()时仍然会出现“未定义引用”错误在FruteLLE的构造函数中,我有方法设置,但我也得到了同样的错误。我也为它自己的代码不好道歉,我仍然处于理解C++的早期阶段,因为我习惯于更简单的JavaYou,也不得不解决@ SnftelySurvivin列出的关注点。不同的课程。我把瓷砖放在前面,我的问题已经解决了,非常感谢:)给我一个更深刻的解释,如果我不这样做,我就不是一个好的学习者
#include "Tile.h"
#include <iostream>
using namespace std;
bool free;
Tile::Tile()
{
cout<<"Constructor Called"<<endl;
}
Tile::~Tile()
{
//dtor
}
bool getFree(){
return free;
}
void setFree(bool bo){
free = bo;
}