Wywoływanie metod szablonów klas zagnieżdżonych w innych szablonach/klasach
Ostatnio zmodyfikowano 2014-01-18 18:43
dziabongo Temat założony przez niniejszego użytkownika |
Wywoływanie metod szablonów klas zagnieżdżonych w innych szablonach/klasach » 2014-01-18 18:26:31 mając takie klasy class wine { typedef std::valarray < int > valArrayInt; private: std::string m_name; Pair < valArrayInt, valArrayInt > m_info; public: wine() { }; wine( std::string nazwa, int rozmiar_tab ); friend std::ostream & operator <<( std::ostream & os, const wine & x ); };
template < class T1, class T2 > class Pair { private: T1 a; T2 b; public: T1 & first(); T2 & second(); T1 first() const { return a; } T2 second() const { return b; } Pair( const T1 & aval, const T2 & bval ) : a( aval ) , b( bval ) { }; Pair() { } };
template < class T1, class T2 > T1 & Pair < T1, T2 >::first() { return a; } template < class T1, class T2 > T2 & Pair < T1, T2 >::second() { return b; }
wewnątrz operator<< chce się dobraź do rozmiary valarray wewnątrz klasy Pair i napisałem tak os <<( x.m_info.first() ).size();
to mi zwraca rozmiar 10, jak utworze obiekt wine zm("blabla", 10) ale nie ma błędów kompilacji, a program się wiesza, wyskakuje że program przestał działać. a jest to pewnie w tej instrukcji bo bez niej niema błędów |
|
pekfos |
» 2014-01-18 18:30:51 Podaj kod, który nie działa. T1 first() const { return a; }
|
Powinieneś zwracać const T1&. |
|
dziabongo Temat założony przez niniejszego użytkownika |
» 2014-01-18 18:35:20 klasa pair nie jest moim dziełem, jest to przykład z książki i mam go wykorzystać w zadaniu. kod który nie działa to konstruktor dla wine i operator << dla wine wine::wine( std::string nazwa, int rozmiar_tab ) : m_name( nazwa ) , m_info( valArrayInt( rozmiar_tab ), valArrayInt( rozmiar_tab ) ) { } std::ostream & operator <<( std::ostream & os, const wine & x ) { os <<( x.m_info.first() ).size(); }
a to jest main #include <iostream> #include "wine.h"
int main( void ) { wine zm1( "blabla", 10 ); std::cout << zm1 << std::endl; return 0; }
|
|
pekfos |
» 2014-01-18 18:37:45 Nie zwracasz os w operator<<. |
|
dziabongo Temat założony przez niniejszego użytkownika |
» 2014-01-18 18:43:42 A no faktycznie przez to endl się nie miał jak wywołać |
|
« 1 » |