我目前对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
)中启动私有变量,因为在执行此操作时它会声明变量是私有的。
答案 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;但这是一个完全不同的变量。 乐意效劳! 不要忘记将其标记为已回答!