首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数返回结构指针

函数返回结构指针
EN

Stack Overflow用户
提问于 2016-05-02 14:06:07
回答 3查看 1.7K关注 0票数 0

我想在C++中创建一个八叉树数据结构。我有一个头文件,如下所示:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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行)

我不知道会发生什么,因为这两个函数的类型是相同的。我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-02 14:18:12

typedef for节点的作用域为类。当你使用

代码语言:javascript
复制
node* Octree::search(int dec, int oct)

在类主体之外,编译器不知道节点是什么,因为我们在类的范围之外。您需要将node限定为类名如下

代码语言:javascript
复制
Octree::node* Octree::search(int dec, int oct)

这允许编译器使用类中的node

Octree中,没有理由在node上使用typedef。与C不同,在使用struct时,不必使用struct关键字。你本可以

代码语言:javascript
复制
class Octree
{
public:
    struct node
    {
        int value;
        node *child[8];
    };
    //...
};

然后您就可以像使用node一样使用typedef了。

票数 2
EN

Stack Overflow用户

发布于 2016-05-02 14:17:30

我不知道会发生什么,因为这两个函数的类型是相同的。

类型不一样。在Octree的定义中,您已经定义了一个嵌套类node。因此,在Octree的定义中,类型名称node引用Octree::node。但是,在Octree定义之外(您已经定义了成员函数),node不引用Octree::node。它指的是::node,它可能是在其他地方声明的。

我做错了什么?

您(意外地)用与声明返回的不同的返回类型重新声明成员函数。只需使用完全限定的名称来引用正确的类型:

代码语言:javascript
复制
Octree::node* Octree::search(int dec, int oct)
票数 2
EN

Stack Overflow用户

发布于 2016-05-02 14:18:50

这个错误是因为您还没有真正声明一个名为node的类型。您已经声明了一个名为Octree::node的类型。由于Octree::search函数的定义在类声明之外,因此需要使用类型的完全限定名:

代码语言:javascript
复制
Octree::node* Octree::search(int dec, int oct) {
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36984444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档