[英]C++ Access struct in sourcefile
我已經在.h
文件中定義了我的struct
,並且試圖從.cc
文件訪問它。 但是,我在編譯時總是出錯。
這是在我的.h
:
class List
{
public:
struct ListNode
{
string data;
ListNode* next;
};
}
這是我.cc
文件:(在.h
包含文件)
struct ListNode* startPtr;
List::List(void)
{
startPtr = new ListNode;
startPtr = nullptr;
}
嘗試像這樣使用時
void Print()
{
while (startPtr)
{
cout << startPtr->data << endl;
startPtr = startPtr->next;
}
}
我收到類似的錯誤
Forward declaration and unauthorized usage of undefined type.
您必須在.cc
文件中include
.h
文件,並且由於ListNode
是在class List
內定義的,因此,如果您想從類外部(其定義和方法之外)訪問它,則需要指定類似於此List::ListNode
的范圍List::ListNode
。
請注意,如果class List
是在特定名稱空間(例如my_namespace
,則要從全局名稱空間訪問ListNode
,則也需要指定此名稱。 像: my_namespace::List::ListNode
。
您的列表節點類是內部類。 它的類型是: List::ListNode
不僅像您使用它那樣的ListNode
。
就像您提到的前向聲明一樣(盡管我在這段代碼中沒有看到任何內容):您將無法前向聲明一個內部類。
您使ListNode
成為List
的嵌套類型,因此必須將其稱為List::ListNode
。 但是,當您聲明startPtr
時,可以不使用該struct
。
當然,由於List::ListNode
是多余的,因此您可能希望將其重命名為Node
。
List::ListNode
因為它是嵌套類型 struct ListNode* startPtr;
只是List::ListNode* startPtr;
List
定義之后插入分號 讓我重新說明基里爾·基洛夫的答案。 程序中有兩種類型:-在類List的范圍內定義的ListNode-在全局范圍內定義的ListNode第2種類型是使用前向聲明定義的,而沒有對其內容的實際描述。 那是您的編譯器試圖對您說的。 要解決該錯誤,在定義startPtr時需要引用正確的ListNode類型,例如,您應該編寫:
List::ListNode* startPtr;
代替
struct ListNode* startPtr;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.