[英]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.