从派生类调用基类函数的问题

时间:2014-11-18 21:42:51

标签: c++ derived-class private-members

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

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

导致问题的特定代码是:

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

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

undefined reference to Tile::getFree()。瓷砖是基类。

FreeTile的标题是:

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

Tile标题是:     #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

最后是Tile的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)中启动私有变量,因为在执行此操作时它会声明变量是私有的。

2 个答案:

答案 0 :(得分:1)

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

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

中声明的函数的类函数实现

另外 在你的Tile中你有一个私人变量“bool free” 在cpp文件中你有一个全局变量“bool free” 这令人困惑。 可能想要删除你在cpp文件中声明的那个。

想要更深入的解释?

答案 1 :(得分:0)

呀!我的第一个回答! 更深入的解释: 您在Class Tile中声明的函数未定义(刚刚声明),因为您没有添加&#34; Tile ::&#34;在cpp文件中的函数定义之前(即你没有定义范围)。 您在cpp文件中编写的函数既在cpp文件中定义又声明,因此只有在cpp文件中写入的函数才能调用它(与c相同)。 也许当你写这个函数时,它并不知道&#34; free&#34;是正确的?因为它不是一个类功能。所以你添加了全球&#34; bool free&#34;但这是一个完全不同的变量。 乐意效劳! 不要忘记将其标记为已回答!