簡體   English   中英

源文件中的C ++訪問結構

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

  • 在您的.cc文件中包含.h文件
  • 將該結構稱為List::ListNode因為它是嵌套類型
  • 不必編寫struct ListNode* startPtr; 只是List::ListNode* startPtr;
  • 在.h文件中的類List定義之后插入分號

讓我重新說明基里爾·基洛夫的答案。 程序中有兩種類型:-在類List的范圍內定義的ListNode-在全局范圍內定義的ListNode第2種類型是使用前向聲明定義的,而沒有對其內容的實際描述。 那是您的編譯器試圖對您說的。 要解決該錯誤,在定義startPtr時需要引用正確的ListNode類型,例如,您應該編寫:

List::ListNode* startPtr;

代替

struct ListNode* startPtr;

暫無
暫無

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

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