Konstruktur und Destruktur

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Chunya
Beiträge: 16
Registriert: Do Feb 13, 2014 10:22 pm

Konstruktur und Destruktur

Beitrag von Chunya » Di Mai 20, 2014 8:39 pm

Guten Tag,

Ich habe die Konstruktor so geschrieben, um eine Funktion TakeAndGetPict() in dem Konstruktor aufzurufen.

in .h Datei

Code: Alles auswählen

// Standardkonstruktur
private:
	KameraApp();

public:
   // Konstruktur 
	KameraApp( int n_Pic, double bleZeit, double bildRate, bool getPhoto);
in .cpp Datei

Code: Alles auswählen


KameraApp::KameraApp( int n_Pic, double bleZeit, double bildRate, bool getPhoto)
{
   if(n_Pic == 1)  
	{
	  TakeAndGetPict(aPhoto, bleZeit );
	}
    else
       {
        .........
       }
}


 int main (int argc, char* argv[])
{
   // hier gibt es irgendwie Fehle, da ich habe die warning bei Kompilierung bekommen, 
   // warning C4800: 'char *': Variable wird auf booleschen Wert ('True' oder 'False') gesetzt 
   KameraApp KApp((int)argv[1], atof(argv[2]), atof(argv[3]), (bool)argv[4]);
}
Könnte Jemand mir helfen? Wie es richtig geschrieben werden soll? In dieserm Fall brauche ich kein Destruktur, oder?

Viele Grüße,
Chunya

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

Re: Konstruktur und Destruktur

Beitrag von Xin » Mi Mai 21, 2014 12:49 am

Moin

Und mangels Kristallkugel siehe hier:
-> Frage formulieren!?
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
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Konstruktur und Destruktur

Beitrag von oenone » Mi Mai 21, 2014 8:36 am

Code: Alles auswählen

((int)argv[1], atof(argv[2]), atof(argv[3]), (bool)argv[4]);
Das ganze gecaste wird definitiv schief gehen. Da hat der Compiler Recht. Du solltest die Parameter manuell auswerten und konvertieren und dann die Ergebnisse übergeben.

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

Re: Konstruktur und Destruktur

Beitrag von Xin » Mi Mai 21, 2014 9:05 am

oenone hat geschrieben:

Code: Alles auswählen

((int)argv[1], atof(argv[2]), atof(argv[3]), (bool)argv[4]);
Das ganze gecaste wird definitiv schief gehen. Da hat der Compiler Recht. Du solltest die Parameter manuell auswerten und konvertieren und dann die Ergebnisse übergeben.
Sehr wahrscheinlich, aber woher weiß ich, dass das sein Problem ist. Ich denke der Fragesteller kann sich erstmal an die üblichen Regeln halten und beschreiben, was er will und erwartet und was stattdessen passiert, bevor sich einer die Mühe macht aus den Teilabschnitten eines Quellcodes beides zu erraten.
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.

Chunya
Beiträge: 16
Registriert: Do Feb 13, 2014 10:22 pm

Re: Konstruktur und Destruktur

Beitrag von Chunya » Mi Mai 21, 2014 9:42 pm

Moin,

danke für die Hinweis. Jetzt möchte ich versuchen, meine Frage besser zu formulieren.

Zuerst habe ich diese vier Parameters definiert, nämlich int n_Pic, double bleZeit, double bildRate, bool getPhoto. Die werde später in Funktion z.B. TakeAndGetPict(...) als übergabeparameter verwendet. Die Funktion TakeAndGetPict(...) möchte ich nach dem Aufruf des Konstruktor auch aufgerufen werden, deshalb definiere ich in dem Konstruktor.

Ziel ist:
Bei Ausführung des Programms KameraApp.exe werden von Benutzer die Werte von dem vier Parameters selbst vorgegeben. Die Kommando für die Ausführung wird z.B. so aussehen:

Code: Alles auswählen

KameraApp.exe 1 2,5  15 false
. Das Programm soll die vier Argumenten übernehmen und damit die Funktion TakeAndGetPict(..) richtig aufgerufen werden kann.

Die Code habe ich so geschrieben. Haben Sie wahrscheinlich recht, dass die Fehle an der Stelle liegt:

Code: Alles auswählen

((int)argv[1], atof(argv[2]), atof(argv[3]), (bool)argv[4])
, da argv[] hat jeweils den Typ von char * .
Ich hätte die Hilfe bekommen, wie die Code sich genau änderen, damit es funktioniert.

Viele Grüße,
Chunya

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

Re: Konstruktur und Destruktur

Beitrag von Xin » Do Mai 22, 2014 12:27 pm

Chunya hat geschrieben: Die Code habe ich so geschrieben. Haben Sie wahrscheinlich recht, dass die Fehle an der Stelle liegt:

Code: Alles auswählen

((int)argv[1], atof(argv[2]), atof(argv[3]), (bool)argv[4])
, da argv[] hat jeweils den Typ von char * .
Ich hätte die Hilfe bekommen, wie die Code sich genau änderen, damit es funktioniert.
argv ist - wie der Datentyp in der Parameterliste der main-Funktion sagt - ein (char const *)-Array:

Code: Alles auswählen

int main( unsigned int argc, char const * argv[] )
Bitte gewöhne Dir nicht an, so zu casten, also (Datentyp) deutet bei Anfängern immer auf einen Denk-Fehler hin, bei Fortgeschrittenen auf ein Planungsproblem und bei Experten, dass sie da etwas machen, was sie entweder kommentiert haben oder keiner mehr versteht.

Also argv[1] ist vom Datentyp (char const *), in Deinem Beispiel "1". Um aus "1" den Integerwert 1 zu erhalten, musst Du atoi( argv[1] ) aufrufen, genauso wie Du es bei atof richtig machst. Statt 2,5 musst Du aber beim Aufruf 2.5 schreiben - das deutsche Komma ist beim Computer der amerikanische Punkt.
argv[4] ist ein string - also immer true. Du musst argv[4] vergleichen mit "true" bzw. "false". Dafür benutzt Du bitte nicht ==, damit vergleichst Du nur die Zeiger. Die passende Funktion heißt strcmp().
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.

Chunya
Beiträge: 16
Registriert: Do Feb 13, 2014 10:22 pm

Re: Konstruktur und Destruktur

Beitrag von Chunya » Fr Mai 23, 2014 4:10 pm

Es funktioniert !
Vielen Dank -:)

Antworten