www.mikrocontroller.net

Forum: PC-Programmierung Tamplate per Isstream füllen


Autor: Kuso (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab ne Templateklasse

template <class T> class Arrerganzung : public Arr<T>
{
public:
  int &operator[](int index)
   {
          if (index > 10) throw out_of_range("Index zu goß") ;
     return arr[index];
   }
   friend istream& operator>> (istream& s, Arrerganzung<T>& p);
};

und die wird so aufgerufen (in der main)

... arr[i] = daten;

i und daten möchte ich in einer eigenen stream klasse einlesen
und zwar so

istream& operator>>(istream& s,Arrerganzung<T> &p)
{

  s>> p.i >> p.daten; //oder mit Mem
  return s;
}

geht aber nicht ohne Template würde es gehen aber nicht als 
Templateklasse

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> i und daten möchte ich in einer eigenen stream klasse einlesen
> und zwar so

Ich sehe da keine eigene Klasse. Nur einen Operator.

> geht aber nicht ohne Template würde es gehen aber nicht als
> Templateklasse

Satzzeichen könnten hier Wunder wirken und dafür sorgen, daß man's nicht 
dreimal lesen muß, um es zu verstehen. Was heißt den "geht aber nicht"? 
Was hast du versucht? Was ist passiert? Was hätte stattdessen passieren 
sollen?

Autor: Kuso (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es lässt sich nicht übersetzen
Template fehler

Autor: Kuso (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mal ein anderes Beispiel gemacht

was muss ich da noch ändern das es sich übersetzen lässt

#include <iostream>
#include <cstring>
#include <string>
#include <list>
using namespace std;
class Bundesland
{
public:Bundesland(char *bundesland = "") {this->bundesland = 
bundesland;}
protected:
  char *bundesland;
};
class Bank : public Bundesland
{
public:Bank(char *bank = "",char *bundesland = "") : 
Bundesland(bundesland)
     {this->bank = bank;}

protected:
   char *bank;


};
template <class T>
class Konto : public Bank
{
public: Konto(char *bank = "",char *bundesland = "", T konto= 0) : 
Bank(bank,bundesland)
    {this->konto = konto;}
    friend ostream &operator<<(ostream &os,Konto &a);
private: T konto;
};

ostream &operator<<(ostream &os,Konto<T> &a)
{
  return os << a.konto  << a.bank<< a.bundesland <<endl;
}
int main(void)
{

Konto <int>ko("sparkasse","bayern", 123);
cout << ko;
   return 0;
}

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt dem Compiler sagen, daß dein Operator ein Template sein soll. 
Dazu mußt du ihm das aber schon bei der friend-Deklaration sagen, wozu 
aber erst eine Forward-Deklaration für den Operator da sein muß, wofür 
man eine Forward-Deklaration der Klasse braucht. Sieht dann gesamt so 
aus:
#include <iostream>
#include <cstring>
#include <string>
#include <list>
using namespace std;
class Bundesland
{
public:Bundesland(const char *bundesland = "") {this->bundesland =
bundesland;}
protected:
  const char *bundesland;
};
class Bank : public Bundesland
{
public:Bank(const char *bank = "",const char *bundesland = "") :
Bundesland(bundesland)
     {this->bank = bank;}

protected:
   const char *bank;


};

template<class T> class Konto;
template <class T>ostream &operator<<(ostream &os,Konto<T> &a);

template <class T>
class Konto : public Bank
{
public: Konto(const char *bank = "",const char *bundesland = "", T konto= 0) :
Bank(bank,bundesland)
    {this->konto = konto;}
    friend ostream &operator<< <>(ostream &os,Konto<T> &a);
private: T konto;
};

template <class T>
ostream &operator<<(ostream &os,Konto<T> &a)
{
  return os << a.konto  << a.bank<< a.bundesland <<endl;
}
int main(void)
{

Konto <int>ko("sparkasse","bayern", 123);
cout << ko;
   return 0;
}

Autor: Kuso (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das steht nirgends bei uns im Skript so ein mist

Autor: Kuso (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber einlesen geht aber totzdem net




#include <iostream>
#include <cstring>
#include <string>
#include <list>
using namespace std;
class Bundesland
{
public:Bundesland(const char *bundesland = "") {this->bundesland =
bundesland;}
protected:
  const char *bundesland;
};
class Bank : public Bundesland
{
public:Bank(const char *bank = "",const char *bundesland = "") :
Bundesland(bundesland)
     {this->bank = bank;}

protected:
   const char *bank;


};

template<class T> class Konto;
template <class T>ostream &operator<<(ostream &os,Konto<T> &a);

template <class T>
class Konto : public Bank
{
public: Konto(const char *bank = "",const char *bundesland = "", T 
konto= 0) :
Bank(bank,bundesland)
    {this->konto = konto;}
    friend ostream &operator<< <>(ostream &os,Konto<T> &a);
  friend istream& operator>>(istream& s,Konto<T> &p);
private: T konto;
};

template <class T>
ostream &operator<<(ostream &os,Konto<T> &a)
{
  return os << a.konto  << a.bank<< a.bundesland <<endl;
}

template <class T>
istream& operator>>(istream& s,Konto<T> &p)
{

  s >> p.konto ; //oder mit Mem
  return s;
}

int main(void)
{


Konto <int>ko("sparkasse","bayern", 123);
cout << ko;
Konto <double>li;
cin >> li;
//cout << li;
   return 0;
}

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
im Skript steht bestimmt auch nicht, wie man eine Quelltext lesbar
zeigt (aber beim Schreiben hier im Forum steht es über dem
eingegebenen Text unter "Formatierung").
So kann das doch keiner lesen.
Und was heißt "geht aber totzdem net"? So klar redet meine Oma über
Motoren.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es mal mit mitdenken? Wieso glaubst du, daß du die Deklaration 
deines input-Operator-Templates anders machen kannst als beim 
dazugehörigen output-Operator? Ist dir nicht aufgefallen, daß da genau 
dieselbe Fehlermeldung kommt? Oder liest du die gar nicht erst?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.