egabel
Grünschnabel
Moin,
ich bekommme in den folgenden Klassen einen
"../src/io/PrintStream.cc: In constructor `PrintStream:rintStream(OutputChannel*)':
../src/io/PrintStream.cc:3: error: uninitialized reference member `PrintStream::channel'
../src/io/PrintStream.cc:4: error: no match for 'operator=' in 'this->PrintStream::channel = &chan'"
error beim make`n. Der andere Thread hier im Board konnte mir da nicht weiterhelfen und google zeigt uns auch die kalte schulter. Vielleicht hat hier ja jemand eine Idee.
PrintStream.h
PrintStream.cc
ich bekommme in den folgenden Klassen einen
"../src/io/PrintStream.cc: In constructor `PrintStream:rintStream(OutputChannel*)':
../src/io/PrintStream.cc:3: error: uninitialized reference member `PrintStream::channel'
../src/io/PrintStream.cc:4: error: no match for 'operator=' in 'this->PrintStream::channel = &chan'"
error beim make`n. Der andere Thread hier im Board konnte mir da nicht weiterhelfen und google zeigt uns auch die kalte schulter. Vielleicht hat hier ja jemand eine Idee.
PrintStream.h
Code:
#ifndef PrintStream_h
#define PrintStream_h
#include "io/OutputChannel.h"
/*
* PrintStream:
Diese Klasse ist aehnlich der Java-PrintStream Klasse
*
Sie konvertiert u.A. numerische Werte in sichtbare Zeichen
*
und gibt Sie auf dem im Konstruktor spezifizierten
*
Ausgabekanal aus.
*
Daraus ergeben sich 2 Teilaufgaben:
*
*
1. Die Feststellung der Ziffern einer Zahl
*
2. Die Umwandlung der Ziffern in darstellbare Zeichen
*
*
Man beachte, dass diese Klasse unabhaengig
*
von dem tatsaechlich verwendeten Ausgabekanal arbeitet.
*
*
Anmerkung: Diese Klasse werden wir spaeter noch in
*
C++ konforme Ausgabe umwandeln.
*/
class PrintStream {
private:
enum Base {
Binary = 2,
Decimal = 10,
Hex = 16
};
public:
PrintStream(OutputChannel* chan);
PrintStream(OutputChannel& chan);
// Ausgabe eines mit einem NULL-Byte terminierten Strings
void print(const char* str);
void print(char ch);
// Ausgabe eines Strings mit anschliessendem Zeichenvorschub
void println(const char* str);
// Zeilenvorschub
void println();
// numerische Werte werden zur Basis 'base' Ausgegeben
// implementiere die Basen 2, 10 und 16
void print(int x, int base = Decimal);
void print(unsigned x, int base = Decimal);
// Zeigertypen werden immer zur Basis 16 ausgegeben!
void print(void* p);
private:
OutputChannel& channel;
static char lookup[];
};
#endif
PrintStream.cc
Code:
#include "io/PrintStream.h"
PrintStream::PrintStream(OutputChannel* chan){
channel = &chan;
};
PrintStream::PrintStream(OutputChannel& chan){
channel=chan;
};
void PrintStream::print(const char* str){
int i=0;
while(str[i]){
++i;
}
channel.show(str,i);
};
void PrintStream::print(char ch){
channel.show(ch);
};
void PrintStream::println(const char* str){
int i=0;
while(str[i]){
++i;
}
channel.show(str,i);
int row,column;
channel.getCursor(row,column);
if (row < 25){
++row;
column=0;
}else{
channel.scroll();
}
};
Zuletzt bearbeitet: