C++ 间隔堆的实现中出现错误

C++ 间隔堆的实现中出现错误,c++,heap,C++,Heap,我试图实现区间堆,但在描述代码的开始,我有一些bug 给你 #include <iostream> using namespace std; template <class T> class IntervalHeap; template <class T> class TwoElement { friend class IntervalHeap <T>; public: T left, right; }

我试图实现区间堆,但在描述代码的开始,我有一些bug

给你

  #include <iostream>
using namespace std;
template <class T> class IntervalHeap;
template <class T>
class TwoElement
{
    friend  class IntervalHeap <T>;
public:
    T left,
        right;
    };
template<class T>
class IntervalHeap
{
public:
    IntervalHeap(int heapsize=10);
    ~IntervalHeap(){delete[] heap;}
    int size()const { return currentsize;}
    T min(){
         if (currentsize==0)
             throw OutOfBounds();
          return heap[1].left;
    }
    T max() { if(currentsize==0)
         throw OutOfBounds();
    return heap[1].right;
    }
    IntervalHeap<T>& Insert(const T& x);
    IntervalHeap<T>& DeleteMin(T& x);
    IntervalHeap<T>& DeleteMax(T& x);



private:
    int currentsize;//number of elemnts in heap
    int Maxsize;//max elements permited
    TwoElement<T>*heap;//element  array


};
int main(){



    return 0;
}

但问题是,在编写像这样的堆[1]的代码时,左侧显示没有可访问的成员

您的意思是
朋友类IntervalHeap

friend
本身用于声明friend函数。

此函数:

#include <iostream>
using namespace std;

template <class T> class IntervalHeap; // forward declaration

template <class T>
class TwoElement
{
    friend  class IntervalHeap<T>; // the "class" was missing
public:
    T left,right;
};

int main(){
    return 0;
}
#包括
使用名称空间std;
模板类IntervalHeap;//远期申报
模板
二类元素
{
friend class IntervalHeap;//缺少“类”
公众:
T左,右;
};
int main(){
返回0;
}
至少编译


我在好友声明中添加了一个类的前向声明
IntervalHead
和关键字class

为什么我们需要两次IntervalHeap声明?嗯。好友声明声明将某个对象(例如类)声明为好友,但不声明该类。换言之:必须先知道类IntervalHeap,然后才能将其作为朋友。(语言律师现在可能会杀了我)。但是我不能通过friend类访问TwoElements中的元素。为什么?显示访问代码。TwoElements类必须是已知的,您要访问它的位置(在IntervalHeap中)。如果它在另一个编译器单元(另一个cpp文件)中,那么这可能就是问题所在。我会更新确定我的代码,当我运行时,它会编译,但通过执行类似于此堆的代码[1]。左键在编译器底部显示未找到成员,此时我将显示我的全部代码
#include <iostream>
using namespace std;

template <class T> class IntervalHeap; // forward declaration

template <class T>
class TwoElement
{
    friend  class IntervalHeap<T>; // the "class" was missing
public:
    T left,right;
};

int main(){
    return 0;
}