簡體   English   中英

函數返回結構指針

[英]Function return struct pointer

我想在C ++中創建一個Octree數據結構。 我有一個頭文件,看起來像這樣:

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 dec,int oct)”不兼容(在“ c:\\ Users \\ xxx \\ Documents \\ Visual Studio 2015 \\ Projects \\ xxx \\ xxx \\ Octree中的第19行聲明。 H”)

我不知道發生了什么,因為兩個函數的類型相同。 我究竟做錯了什么?

我不知道發生了什么,因為兩個函數的類型相同。

類型一樣。 Octree的定義內,您定義了一個嵌套的類node 因此,在Octree的定義內,類型名稱node指的是Octree::node 但是,在Octree的定義之外(您已在其中定義了成員函數), node並未引用Octree::node 它指的是::node ,它可能已經在其他地方聲明了。

我究竟做錯了什么?

您(意外地)使用不同於聲明要返回的返回類型來重新聲明成員函數。 只需使用標准名稱來引用正確的類型:

Octree::node* Octree::search(int dec, int oct)

節點的typedef范圍為該類。 使用時

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];
    };
    //...
};

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

該錯誤是因為您實際上尚未聲明一個稱為node的類型。 您已經聲明了一個名為Octree::node的類型。 由於Octree::search函數的定義在類聲明之外,因此您需要使用類型的完全限定名稱:

Octree::node* Octree::search(int dec, int oct) {
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM