从派生类调用基类函数时出现问题

Issues calling base class function from derived class

本文关键字:问题 类函数 基类 派生 调用      更新时间:2023-10-16

我目前对 c++ 很陌生,我已经开始学习如何在路径查找算法中使用指针。

我在调用从基类派生的类中的函数时遇到问题。

导致问题的特定代码段是:

FreeTile *tempPointer = new FreeTile();
cout<<tempPointer->getFree()<<endl;
mapp[i][j] = tempPointer;

当我调用getFree(返回布尔值)时,我收到错误:

undefined reference to Tile::getFree() .磁贴是基类。

自由磁贴的标头为:

#ifndef FREETILE_H
#define FREETILE_H
#include "Tile.h"
class FreeTile:public Tile
{
    public:
        FreeTile();
        virtual ~FreeTile();
        void setParent(FreeTile* par);
        int getF();
        int getG();
        int getH();
        void setF(int in);
        void setG(int in);
        void setH(int in);
        FreeTile* getParent();
    protected:
    private:
        int F;
        int G;
        int H;
        bool free;
};

磁贴标题为: #ifndef TILE_H #define 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;
}

如果您需要更多代码,或者如果我缺少一些公然的东西,请随时羞辱我,就像你喜欢的那样:P

提前谢谢。

附带说明一下,您能否在构造函数中启动一个私有变量,例如free = true这样做时它声明该变量是私有的。

在 Cpp 文件中将 "bool getFree()" 重命名为"bool Tile::getFree()"

在您的实现中,该函数只是一个常规的 c 全局函数。在固定版本中,它是您在头文件中声明的函数的类函数实现

也在您的磁贴中的第一个,您有一个私有变量"无布尔值"在 cpp 文件中,您有一个全局变量"无布尔值"这是令人困惑的。可能想删除您在 cpp 文件中声明的那个。

想要更深入的解释吗?

是的!我的第一个答案!更深层次的解释:您在类磁贴中声明的函数未定义(刚刚声明),因为您没有在 cpp 文件中的函数定义之前添加"Tile::"(即您没有定义作用域)。您在 cpp 文件中编写的函数在 cpp 文件中既定义又声明,因此只有在 cpp 文件中编写的函数才能调用它(工作原理与 c 相同)。可能当你编写函数时,它不知道"free"是,对吧?因为它不是一个类函数。所以你添加了全局"无布尔值",但这是一个完全不同的变量。很高兴帮忙!不要忘记将此标记为已回答!