Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wywoływanie metod szablonów klas zagnieżdżonych w innych szablonach/klasach

Ostatnio zmodyfikowano 2014-01-18 18:43
Autor Wiadomość
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
C/C++
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 );
   
};
C/C++
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

C/C++
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
P-102472
pekfos
» 2014-01-18 18:30:51
Podaj kod, który nie działa.

C/C++
T1 first() const { return a; }
Powinieneś zwracać const T1&.
P-102473
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
C/C++
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
C/C++
#include <iostream>
#include "wine.h"

int main( void )
{
    wine zm1( "blabla", 10 );
   
    std::cout << zm1 << std::endl;
   
    return 0;
}
P-102475
pekfos
» 2014-01-18 18:37:45
Nie zwracasz os w operator<<.
P-102477
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ć
P-102478
« 1 »
  Strona 1 z 1