Pointer Probleme

Hallo, versuch mich grad an meinem ersten C++ Programm und hab ein Problem. Führe ich folgendes Programm aus, bekomm ich

11 main.cpp conflicting declaration 'ECSDialog Filename' 
9 main.cpp 'Filename' has a previous declaration as `char Filename[20]' 
11 main.cpp declaration of `ECSDialog Filename' 
9 main.cpp conflicts with previous declaration `char Filename[20]' 
11 main.cpp no matching function for call to `ECSDialog::ECSDialog()'
 candidates are: ECSDialog::ECSDialog(const ECSDialog&amp:wink:
 ECSDialog::ECSDialog(char\*) 

Der Code:

main.cpp:

#include 
#include 
#include "ecsdialog.h"
using namespace std;

int main(int argc, char \*argv[]){ 
 char Filename[20];
 strcpy("1.log",Filename);
 ECSDialog(Filename);
 system("PAUSE");
 return EXIT\_SUCCESS;
}


ecsdialog.h:

#include 
#include 
using namespace std;

class ECSDialog{
private: 
 char s\_zeile[256];

public:
 ECSDialog::ECSDialog(char\* p\_Filename) {
 ifstream f\_logfile (p\_Filename);
 if( !f\_logfile ) throw "Fehler beim Öffnen!";
 cout 

lg
fabian

Hallo,

11 main.cpp conflicting declaration ‚ECSDialog Filename‘

Eine ganz wichtige Merkregel: der erste gemeldete Fehler des Compilers ist der, den man zuerst behebehn sollte. Alle anderen könnten Folgefehler dieses ersten Fehlers sein.

> ECSDialog(Filename);

Hier liegt, wie die Fehlermeldung schon sagt, der Hund begraben. Auch wenn du es nicht wolltest, hast du hier probiert, ‚Filename‘ als Variable zu deklarieren. Was du vermutlich schreiben wolltest, war

ECSDialog d = ECSDialog(Filename);

Anscheinend kannst du keinen Konstruktor aufrufen, ohne das Ergebnis einer Variable zuzuweisen.

Grüße,
Moritz

Was du vermutlich schreiben wolltest, war

ECSDialog d = ECSDialog(Filename);

Da ruft dann gleich noch den impliziten Zuweisungsoperator auf, der irgendwas macht. In dem Fall funktioniert das nicht und selbst wenn würde es zuviel überflüssiges Zeug machen:

  • Es konstruiert ein Objekt d mit dem Standard-Konstruktor, der nicht existiert.

  • dann wird ein anonymes Objekt durch den Konstruktor ECSDialog(char*) erzeugt

  • dieses Objekt überschreibt dann das ursprünglich für d erzeugte Objekt.

Das

ECSDialog(Filename);

funktioniert nicht wirklich. Du versuchst wohl, eine anonyme Instanz von ECSDialog zu erstellen, das geht aber nicht. Du musst eine richtige Variable definieren, z.B.

ECSDialog varname_i_dont_ever_need( Filename );

Außerdem:

Hallo, versuch mich grad an meinem ersten C++ Programm und hab
ein Problem.

Wenn das dein erstes C+±Programm ist und in deinem Code die Zeichenfolge „char*“ vorkommt, dann ist das Programm fehlerhaft. Schau dir std::string an und vermeide C-Strings wo immer das möglich ist.

Danke euch
Die string Klasse hab ich mitterweile auch gefunden.

lg
fabian