【问题标题】:How to access a structure declared inside of a class?如何访问在类中声明的结构?
【发布时间】:2020-04-26 16:15:23
【问题描述】:

我有一个实现节点结构的链表类,像这样:

template<class T>
class LinkedList
{
public:
    struct Node {
        T value;
        Node *next;
    };

    int Length;
    Node *head;
    Node *tail;

    LinkedList() {
    Length = 0;
    Node* head = nullptr;
    Node* tail = nullptr;
    }
};

我尝试从驱动程序文件中访问节点Node 结构,如下所示:

#include "LinkedList.h"

template<class T>
void foo(LinkedList<T> list) {
    LinkedList<T>::Node* a = list.head; // does not work
    LinkedList<int>::Node* b = list.head; // works (if T is int of course)
}

使用模板 T 不起作用(它给我“找不到标识符”错误消息),而直接指定正确的数据类型有效。这是为什么?有没有办法避免错误?

【问题讨论】:

  • typename LinkedList&lt;T&gt;::Node *a。基本上,由于LinkedList&lt;T&gt; 命名模板特化,编译器不知道LinkedList&lt;T&gt;::Node 是类型,因为它可能是静态变量,或者可能是成员函数,所以你需要明确地说它是一个类型.请参阅the linked question 了解原因
  • @HTNW,我实际上看到了这个问题,但不明白如何使用它来解决我的问题。感谢您的帮助

标签: c++ templates struct


【解决方案1】:

使用typename LinkedList&lt;T&gt;::Node* a = ...

问题在于不知道 T 到底是什么,编译器不能确定 LinkedList&lt;T&gt;::Node 确实是一个类型(LinkedList 可以专门用于 T,所以定义没有帮助)。你需要指示它这样对待它。

【讨论】:

    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多