[C++] Deklaracje zapowiadające klasy
Ostatnio zmodyfikowano 2013-12-19 22:31
dualshot Temat założony przez niniejszego użytkownika |
[C++] Deklaracje zapowiadające klasy » 2013-12-19 18:14:58 witam, mój problem dotyczy deklaracji zapowiadających. mianowicie: jak użyć metody z zapowiedzianej klasy? oto kod który mam nadzieję wszystko rozjaśni #include <iostream> #include <cstdlib> using namespace std;
namespace P_I { class BB; } namespace P_II { class OO { public: P_I::BB * box; OO() { box.metoda(); } }; } namespace P_I { class BB { public: void metoda() { cout << "BB.metoda"; }; }; }
oczywiście logicznie rzecz biorąc zdaję sobie sprawę dlaczego przykład nie skompiluje się, ale nie wiem jak pozbyć się problemu. jeśli pamiętacie/macie gdzieś pod ręką literaturę odnoszącą się do deklaracji zapowiadających to byłbym wdzięczny. pozdrawiam i z góry dzięki za pomoc |
|
Monika90 |
» 2013-12-19 20:14:58 Musisz umieścić definicję konstuktora OO() po deklaracji funkcji BB::metoda namespace P_I { class BB; }
namespace P_II { class OO { public: P_I::BB * box; OO(); }; }
class P_I::BB { public: void metoda() { }; };
inline P_II::OO::OO() { box->metoda(); }
Ewentualnie można też użyć polimorfizmu, tzn. szablonów albo f. wirtualnych, co pozwala na wykonywanie operacji na obiektach bez znajomości ich konkretnego typu. |
|
dualshot Temat założony przez niniejszego użytkownika |
» 2013-12-19 21:51:42 właśnie tego się obawiałem, tzn. zagmatwania kodu. w takim razie nie pozostaje mi nic innego jak przyswojenie szablonów. dzięki wielkie. |
|
Monika90 |
» 2013-12-19 22:03:21 Nie wiem o jakim zagmatwaniu mówisz. Dla mnie wygląda prosto.
Po co ci w ogóle deklaracja zapowiadająca, chesz mieć dwie klasy, które wywołują swwoje składowe nawzajem? |
|
dualshot Temat założony przez niniejszego użytkownika |
» 2013-12-19 22:31:41 zagmatwania w sensie definiowania funkcji(w tym wypadku konstruktora) poza klasą (nie znoszę skakania po kodzie w poszukiwaniu czegokolwiek)
tak, własnie o to mi chodzi. po prostu mam klasę 'Osoba' w której mam funkcję 'wypisz()'. do tego napisałem sobie klasy 'Node' i 'List' (tak, do stworzenia listy jednokierunkowej), które będą tworzyć listę obiektów typu 'Osoba'. w klasie 'List' mam funkcję 'display()' i ona korzysta z funkcji 'wyswietl()' każdego obiektu 'Osoba'.
mam taki kaprys żeby klasy które nie tworzą programu pod względem biznesowym (czyli tak jak 'lista' jest tylko strukturą danych) wrzucić na samą górę pliku. tutaj oczywiście ujawnia się moje infantylne podejście do programowania i brak być może podstawowej wiedzy ale jeszcze nie przywykłem nawet do dzielenia projektu na pliki :P |
|
« 1 » |