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

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

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

Beitrag von soufian88 » Di Dez 15, 2009 9:14 pm

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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Di Dez 15, 2009 9:32 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

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

Beitrag von Dirty Oerti » Di Dez 15, 2009 9:35 pm

Wie Xin schon sagte, es ist eine FUNKTION. Also musst du es auch so behandeln:
cout<<"\n" <<Heide.zeigeBaudaten();
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Di Dez 15, 2009 9:38 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

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

Beitrag von fat-lobyte » Di Dez 15, 2009 9:38 pm

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.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

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

Beitrag von soufian88 » Di Dez 15, 2009 9:45 pm

hmm jetzt sagt Codeblock :

Code: Alles auswählen

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Di Dez 15, 2009 9:48 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

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

Beitrag von soufian88 » Di Dez 15, 2009 9:55 pm

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
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Di Dez 15, 2009 10:59 pm

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 :)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten