referencja do klasy zagnieżdżonej w klasie

0

Witam,
kawalek kodu:

template <class Type>
class Vector
{
  private:
    enum {MAX = 40, nextMAX = 20};
    class Node
    {
      public:
        Node* Next;
        Node* Prev;
        Type* Object;

        Node()
        {
          Next = Prev = NULL;
          Object = NULL;
        }
    };
    unsigned int Counterr;
    Node* Begin;
    Node* End;
  public:
    Vector();
    void GetSize()
      {return Counterr;}

    bool add(Type& pObject);
    bool del(unsigned int Num = GetSize());
    Node& operator[](int i);
};

i nastepnie definicja przeciazenia operatora []:

Node& Vector::operator[](int i)
{
  
}

i tutaj wystepuje problem z kompilacja, jest to lista dwukierunkowa, i za pomoca operatora [] chce wyluskac adres odpowiedniego wezla (klasa Node).

0

2 rzeczy:

private:
   class Node{..};

public:
   Node& operator[](int i);
  • nie mozesz zwrocic czegos prywatnego, bo upublicznisz. albo Node bedzie publiczny, albo musisz zwracac cos innego
template <class Type>
class Vector
{
   class Node{ Type* Object;};
   Node& operator[](int i);
};

Node& Vector::operator[](int i)
{
    ...
}

zwroc uwage, ze Node jest tak na prawde szablonem! Node zawiera w sobie typie "Type", a wiec nie mozesz sobie jego implementacji ot tak wyciagnac poza klase..

mzoesz zrobic np. tak:

template<class Type>
Vector<Type>::Node& Vector<Type>::operator[](int i)
{
    ...
}

ale ale.. jest jeden problem. jesli takie cos umiescisz w pliku .cpp a w .h zostawisz sama definicje to bedziesz mial pelno unresolved symbols. stanie sie tak, poniewaz kompilujac plik .cpp kompilator nie bedzie wiedzial w jakich kontekstach ta funkcja bezdie uzywana (-> czyli ile specjalizacji i jakimi typami podstawiac za Type).. tak wiec najbezpieczniej jest wszystkie template-metody inlineowac w definicji w pliku .h:

template <class Type>
class Vector
{
   class Node{ Type* Object;};
   Node& operator[](int i)
   {  ....
   }
}

</cpp></cpp>

0

dziekuje za odpowiedz, temat mozna zamknac.

1 użytkowników online, w tym zalogowanych: 0, gości: 1