Seite 1 von 1

error: no match for ‘operator<<’ ......... ?

Verfasst: Di Dez 15, 2009 9:14 pm
von soufian88
Hallo,

Ich habe eine Basisklasse Namens Grundstück geschrieben.In der einen Datei sind die Definitionen usw und in der anderen Datei sind die Implementierungen.
Soweit so gut ,dann habe ich eine Ableitung erzeugt Namens Baugrundstück mit den Definitionen in der .h Datei und die Implementierungen in der .cpp Datei,anschließend habe ich eine weitere Ableitung diesmal von der Baugrundstück Klasse namens Baudenkmal abgeleitet, und dazu die .h und .cpp Datei
geschrieben und die sehen folgendermaßen so aus :


Baudenkmal.h

Code: Alles auswählen

#ifndef _BAUDENKMAL_
#define _BAUDENKMAL_
#include "Baugrundstück.h"

class Baudenkmal : public Baugrundstueck{

    public:
     Baudenkmal(char *g,char *sh, int l,int ls,int gf,int y,int wf);
     ~Baudenkmal();
     void zeigeBaudaten();

     private:
     char schutz[50],gemarkung1[55];
     int flur1,flurstueck2,grundflaeche,bauyear,wohnflaeche;
};


#endif

Baudenkmal.cpp:

Code: Alles auswählen

#include <iostream>
#include <cstring>
#include "Baudenkmal.h"

using namespace std;


Baudenkmal::Baudenkmal(char *g,char *sh, int l,int ls,int gf,int y,int wf){

    strncpy(schutz,sh,50);
    strncpy(gemarkung1,g,55);
    flur1=l;
    flurstueck2= ls;
    grundflaeche=gf;
    bauyear=y;
    wohnflaeche=wf;
}


void Baudenkmal::zeigeBaudaten(){
    cout << "\n" <<"Gemarkung: " <<"\n"
         << gemarkung1 <<"\n"
         <<"Flur : " <<"\n"
         << flur1 <<"\n"
         <<"Flurstueck : "<< "\n"
         <<flurstueck2 <<"\n"
         <<"Grundstueckflaeche : " << "\n"
         <<grundflaeche <<"\n"
         <<"baujahr : " <<"\n"
         <<bauyear <<"\n"
         <<"Wohnflaeche : " << "\n"
         <<wohnflaeche<<"\n"
         <<"Geschütztes Gebaeudeteil:" <<"\n"
         <<schutz <<"\n";
}




Main.cpp

Code: Alles auswählen

#include <iostream>
#include "Baudenkmal.h"

using namespace std;

int main(){

    Baudenkmal Heide("Heidetal","Fassade",120,47,325,1749,65);

    cout<<"\n" <<Heide.zeigeBaudaten;
    return 0;
}
Die Fehlerquelle kommt von der main Datei und Codeblocks gibt mir folgende Fehlermeldung:

Code: Alles auswählen

error: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)(& std::cout)), ((const char*)"\012")) << Heide.Baudenkmal::zeigeBaudaten’|
Ich habe wirklich lange angeguckt und versucht es zu lösen jedoch ohne Erfolg. :?
Ich habe noch das Ganze Projekt in zip komprimiert und ins Forum gestellt.
Ich hoffe ihr könnt mir helfen.
Danke im voraus.

Re: error: no match for ‘operator<<’ ......... ?

Verfasst: Di Dez 15, 2009 9:32 pm
von Xin
zeigeBaudaten ist eine Funktion, die nichts (void) zurückliefert.

Du müsstest etwas zurückliefern, für dass ein ein operator <<( std::cout, datentyp ) definiert ist.
Deine Funktion ruft selbst cout auf. Du kannst die Funktion also so auch aufrufen.

Du könntest Dir einen operator << definieren, der ein Baudenkmal nimmt.

Re: error: no match for ‘operator<<’ ......... ?

Verfasst: Di Dez 15, 2009 9:35 pm
von Dirty Oerti
Wie Xin schon sagte, es ist eine FUNKTION. Also musst du es auch so behandeln:
cout<<"\n" <<Heide.zeigeBaudaten();

Re: error: no match for ‘operator<<’ ......... ?

Verfasst: Di Dez 15, 2009 9:38 pm
von Xin
Dirty Oerti hat geschrieben:Wie Xin schon sagte, es ist eine FUNKTION. Also musst du es auch so behandeln:
cout<<"\n" <<Heide.zeigeBaudaten();
...und die Funktion liefert nichts zurück, was man ausgeben könnte.

Re: error: no match for ‘operator<<’ ......... ?

Verfasst: Di Dez 15, 2009 9:38 pm
von fat-lobyte
soufian88 hat geschrieben:

Code: Alles auswählen

    cout<<"\n" <<Heide.zeigeBaudaten;
Du musst dich Fragen was du hier überhaupt tust. zeigeBaudaten ist doch eine Funktion die void zurückgibt? Eine Funktion (auch Memberfunktion) kann so aufrufen: zeigeBaudaten() . Lässt du die Klammern weg ist das kein Funktionsaufruf, sondern nur der Funktionszeiger.
Und dann rufst du operator << () mit dem Funktionszeiger auf. Was soll dabei rauskommen?
Funktionieren sollte einfach nur folgendes:

Code: Alles auswählen

cout<<"\n";
Heide.zeigeBaudaten();
Wenn du etwas besonderes mit dem operator << () vorhast, musst du das so schreiben. Aber das ist eine andere geschichte.

Re: error: no match for ‘operator<<’ ......... ?

Verfasst: Di Dez 15, 2009 9:45 pm
von soufian88
hmm jetzt sagt Codeblock :

Code: Alles auswählen

main.cpp:(.text+0xe6)||undefined reference to `Baudenkmal::~Baudenkmal()'|

Re: error: no match for ‘operator<<’ ......... ?

Verfasst: Di Dez 15, 2009 9:48 pm
von Xin
soufian88 hat geschrieben:hmm jetzt sagt Codeblock :

Code: Alles auswählen

main.cpp:(.text+0xe6)||undefined reference to `Baudenkmal::~Baudenkmal()'|
Dann lies die Meldung doch mal ^^

Du hast einen Destruktor in der Headerdatei deklariert, aber in der .cpp nicht definiert.

Re: error: no match for ‘operator<<’ ......... ?

Verfasst: Di Dez 15, 2009 9:55 pm
von soufian88
Danke Alles wunderbar geklappt.
Naja aber mit dem .h und .cpp Dateien werde ich mich noch gewöhnen ist ja das erste mal. :)
So noch eine Dankeschön an das Forum obwohl es doch recht easy war es rauszufinden. :D

Re: error: no match for ‘operator<<’ ......... ?

Verfasst: Di Dez 15, 2009 10:59 pm
von Xin
soufian88 hat geschrieben:Danke Alles wunderbar geklappt.
Naja aber mit dem .h und .cpp Dateien werde ich mich noch gewöhnen ist ja das erste mal. :)
So noch eine Dankeschön an das Forum obwohl es doch recht easy war es rauszufinden. :D
Beim ersten Mal ist es halt noch was komplizierter, weil man es nicht weiß - dafür ist das Forum da. Blöde Sprüche inklusive ;->

Es erinnert mich aber daran, dass ich im C++-Tutorial ein Kapitel zur Operator-Überladung einfügen muss, was zum Glück schon auf meiner privaten Homepage halbfertig liegt :)