ошибка в реализации интервальной кучи - PullRequest
0 голосов
/ 01 марта 2012

я пытаюсь реализовать интервальную кучу, но в начале описания кода у меня есть некоторые ошибки

здесь это

  #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>------ Build started: Project: interval_heap, Configuration: Debug Win32 ------
1>  interval_heap.cpp
1>  interval_heap.vcxproj -> c:\users\daviti\documents\visual studio 2010\Projects\interval_heap\Debug\interval_heap.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

но проблема в том, что при написании кода, подобного этой куче [1]. Слева он показывает мне Нет доступных членов

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Этот:

#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;
}

по крайней мере компилируется.

Я добавил предварительное объявление вашего класса IntervalHead<T> и ключевое слово class в объявлении друга.

0 голосов
/ 01 марта 2012

Вы имеете в виду friend class IntervalHeap<T>?

friend сам по себе используется для объявления функции друга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...