我想在C++中创建一个八叉树数据结构。我有一个头文件,如下所示:
class Octree
{
public:
typedef struct node
{
int value;
node *child[8];
}node;
Octree();
~Octree();
int convert(int sorszam);
void clear(struct node*);
node* search(int dec,int oct);
};我想在.cpp文件中编写搜索函数,但是我总是收到一条错误消息。以下是.cpp代码:
node* Octree::search(int dec, int oct) {
//doing something here
return nullptr;
}错误信息说:
声明与"Octree::node *Octree::search(int,int )“不兼容(声明在"c:\Users\xxx\Documents\Visual Studio 2015\Projects\xxx\xxx\Octree.h”第19行)
我不知道会发生什么,因为这两个函数的类型是相同的。我做错了什么?
发布于 2016-05-02 14:18:12
typedef for节点的作用域为类。当你使用
node* Octree::search(int dec, int oct)在类主体之外,编译器不知道节点是什么,因为我们在类的范围之外。您需要将node限定为类名如下
Octree::node* Octree::search(int dec, int oct)这允许编译器使用类中的node。
在Octree中,没有理由在node上使用typedef。与C不同,在使用struct时,不必使用struct关键字。你本可以
class Octree
{
public:
struct node
{
int value;
node *child[8];
};
//...
};然后您就可以像使用node一样使用typedef了。
发布于 2016-05-02 14:17:30
我不知道会发生什么,因为这两个函数的类型是相同的。
类型不一样。在Octree的定义中,您已经定义了一个嵌套类node。因此,在Octree的定义中,类型名称node引用Octree::node。但是,在Octree定义之外(您已经定义了成员函数),node不引用Octree::node。它指的是::node,它可能是在其他地方声明的。
我做错了什么?
您(意外地)用与声明返回的不同的返回类型重新声明成员函数。只需使用完全限定的名称来引用正确的类型:
Octree::node* Octree::search(int dec, int oct)发布于 2016-05-02 14:18:50
这个错误是因为您还没有真正声明一个名为node的类型。您已经声明了一个名为Octree::node的类型。由于Octree::search函数的定义在类声明之外,因此需要使用类型的完全限定名:
Octree::node* Octree::search(int dec, int oct) {
...https://stackoverflow.com/questions/36984444
复制相似问题