Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Klasa wewnętrzna w C++

#1
Klasa wewnętrzna w C++
Witam. Mam dość dziwny problem ze zdefiniowaniem funkcji, której jako wartość zwracaną chcę ustawić wskaźnik do obiektu klasy wewnętrznej. Dziwny ponieważ gdy zdefiniuję funkcję wewnątrz klasy (tej zewnętrznej, będącej szablonem) to kompilator nie widzi żadnego błędu, natomiast gdy wewnątrz w/w klasy funkcję tylko zadeklaruję to kompilator znajduje błąd przy próbie definicji funkcji na zewnątrz. Obrazowo wygląda to mniej więcej tak:
template <typename typ>
class bt
{

  class node
   {
   typ value;
   };

node* fun(typ x, node* und); //deklaracja funkcji
};

template <typename typ> 
node* bt<typ>::fun(typ x, node* und) //tej linijki kompilator się czepia mówiąc: 'node does not name a type,                                            //lecz  gdy zdefiniuję funkcję wewnątrz klasy bt<> to wszystko jest ok... dlaczego?
{
definicja....
}
 (Używam DEV C++)
 System operacyjny: windows_eight Przeglądarka: firefox
#2
RE: Klasa wewnętrzna w C++
Witam, klasa node nie jest widoczna, dlatego trzeba jawnie się do niej odwołać:
Kod:
template <typename T>
class bt
{
    class node
    {
        T value;
    };
    node* fun(T x, node* und); //deklaracja funkcji
};

template <typename T>
typename bt<T>::node* bt<T>::fun(T x, node* und)
{
}

 System operacyjny: linux_ubuntu Przeglądarka: firefox
#3
RE: Klasa wewnętrzna w C++
I tu mnie właśnie zastanawia dlaczego nie jest widoczna w definicji funkcji, która została zadeklarowana w miejscu dostrzegającym definicję klasy node ? Natomiast w tym samym ciele tej samej funkcji, lecz owszem- zdefiniowanej w zakresie, w którym klasa node jest widoczna, błędu już żadnego nie ma. Kompilator nie widzi/nie rozumie zapisu:
node* bt<typ>::fun(typ x, node* und) (gdzie podany jest operator zakresu wyraźnie zaznaczający, o którą funkcję której klasy chodzi)? Byłbym bardzo wdzięczny za fachowe wytłumaczenie bo mi to nie daje spaćOczko
 System operacyjny: windows_eight Przeglądarka: firefox
#4
RE: Klasa wewnętrzna w C++
Definicja klasy node znajduje się wewnątrz klasy bt, dlatego trzeba się jawnie odwołać do niej - samo jawne odwołanie się do metody fun nie rozwiązuje sprawy.

 System operacyjny: linux_ubuntu Przeglądarka: firefox
#5
RE: Klasa wewnętrzna w C++
Byłem przekonany, że skoro jest to funkcja klasy zewnętrznej (czyli znająca klasę wewnętrzną Język ) to jej ciało może wyglądać tak samo wewnątrz jak i na zewnątrz tej klasy bt. Dodam, że przy próbach definiowania testowałem formuły typu:
template <typename typ> 
node* bt<typ>::fun(typ x, node* und)...

template <typename typ>
bt<typ>::node* bt<typ>::fun(typ x, node* und)...

template <typename typ>
bt<int>::node* bt<typ>::fun(typ x, node* und)...

template <typename typ>
bt<typ>.
node* bt<typ>::fun(typ x, node* und)...

i chyba jeszcze parę innych, lecz przez myśl mi nie przeszło, że w linijce nazwy tej funkcji (na zewnątrz klasy) przy definiowaniu musi się powtórzyć słowo kluczowe typename Wesoły Wielkie dzięki za pomocOczko
 System operacyjny: windows_eight Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki (Klasa wewnętrzna w C++)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Klasa, a funkcja zapisująca dane do pliku. Dreamer1x6xX 3 5666 26.03.2015, 08:47
Ostatni post: Szachista
  C++ Windows Forms App + własna klasa gubi 0 2086 23.09.2012, 18:57
Ostatni post: gubi
  jak to rozumieć? Case wewnętrzna zagnieżdżona w instrukcji wyboru Case zewnętrznej dawid653 2 1316 24.06.2011, 12:47
Ostatni post: dawid653

Skocz do:


Wybrane wątki (Klasa wewnętrzna w C++)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Pomysł napisania programu ROM FireBytes 3 6604 28.06.2018 16:56
Ostatni post: FireBytes
  [VBA] Tworzenie nowego arkusza z danymi z TextBox'a Pioro 4 6698 19.06.2018 23:24
Ostatni post: broda99
  Potwierdzenie na maila po wysłaniu pliku coci 0 6030 13.06.2018 20:37
Ostatni post: coci
  Pieczętowanie Archiwum Jar - Po co? wanhelsing 3 6646 19.05.2018 20:55
Ostatni post: koneton
  Wyszukiwarka w spawnerze nie reaguje na polskie znaki kazik666 0 6405 16.05.2018 12:04
Ostatni post: kazik666
  BASH symulator silnika dawswi1 3 6868 13.05.2018 10:43
Ostatni post: Szachista
  Autohotkey automatyczny zapis TheProgson 0 6505 07.05.2018 21:27
Ostatni post: TheProgson
  VBA Pobieranie wybranych plików z danymi julietta03 1 6645 04.05.2018 08:25
Ostatni post: broda99
  [VBA] Przenoszenie danych między formularzami Pioro 4 7010 23.04.2018 11:48
Ostatni post: broda99
  Skrypt, który szuka i zamienia armen10 2 6854 23.04.2018 10:04
Ostatni post: armen10
  Liniowa regresja w Pythonie a budowanie modelu Trojan3000 2 6981 16.04.2018 13:26
Ostatni post: Trojan3000
  Początki z bashem - jak napisać skrypty: wysłanie maila i kalkulator? Kristov81 4 10763 21.03.2018 18:32
Ostatni post: Szachista
Ściana Zadanie cmd.... Yanke$ 2 7932 16.03.2018 17:20
Ostatni post: FireBytes
  Poszukuj kogoś do pomocy FireBytes 0 6869 16.03.2018 16:58
Ostatni post: FireBytes
  Program liczący liczby pierwsze Mersenne'a raistin 2 7052 12.03.2018 12:51
Ostatni post: Szachista