繁体   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