2017-04-04 101 views
0

是否可以指向在類中另一個文件中定義的結構?指向另一個文件中定義的結構的指針

我試圖像下面的代碼,但得到這個錯誤:

cannot convert 'main()::list*' to 'entry::list*' in assignment

main.cpp中:

#include "entry.h" 
#include <vector> 

int main() 
{ 

struct list 
{ 
    std::vector<entry*> entryVector; 
    int temp; 
}; 

list A; 
entry B; 

B.ptrToStruct = &A; 


return 0; 
} 

entry.h:

#ifndef ENTRY_H 
#define ENTRY_H 
#include <string> 

class entry 
{ 
public: 

    struct list; //prototype does not work 

    std::string text; 
    struct list* ptrToStruct; 

}; 

#endif // ENTRY_H 

我也試着寫這樣的原型:

struct main::list; 

因爲沒有聲明'main',所以沒有工作。

+2

首先關於您的術語的小記錄:*原型*是函數的前向聲明。你在'entry'類中做什麼只是向前聲明'entry :: list'類。然後講述你的問題:不,你不能訪問另一個範圍的函數中聲明或定義的符號。 –

+1

順便說一句,有項目互相鏈接是有點不尋常的。如果每個'entry'屬於'list',爲什麼它必須跟蹤它屬於哪個列表?添加和刪​​除條目將會非常複雜。 –

+0

它用於設置菜單。這些條目在運行時不會改變。 我需要ptrToStruct指向該菜單項的子菜單。 所以我的結構是我的列表,其中包含條目的向量。其中一些條目有一個子列表。這就是爲什麼我需要指針。該結構還包含一個保存所選條目的int值。 我有一種感覺,這不是最好的辦法。我打開提示! –

回答

2

這是關於範圍。當您在entry內宣告list這是一個新類型entry::list

如果你想要一個全局類型list你應該將struct list;移動到全局範圍之外。

您可能想要對main中的聲明做同樣的事情。

+0

謝謝。有全局變量是不好的風格,對吧? –

+0

是的,全局變量比全局類型導致更多的複雜性。 –

+0

對不起,全球型是指什麼? 如果我將結構的定義放入一個單獨的.h文件並將其包含在我的main.cpp和entry.h中,該怎麼辦?這會更好嗎? –

相關問題