Seite 1 von 1

Konstruktur und Destruktur

Verfasst: Di Mai 20, 2014 8:39 pm
von Chunya
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

Re: Konstruktur und Destruktur

Verfasst: Mi Mai 21, 2014 12:49 am
von Xin
Moin

Und mangels Kristallkugel siehe hier:
-> Frage formulieren!?

Re: Konstruktur und Destruktur

Verfasst: Mi Mai 21, 2014 8:36 am
von oenone

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.

Re: Konstruktur und Destruktur

Verfasst: Mi Mai 21, 2014 9:05 am
von Xin
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.

Re: Konstruktur und Destruktur

Verfasst: Mi Mai 21, 2014 9:42 pm
von Chunya
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

Re: Konstruktur und Destruktur

Verfasst: Do Mai 22, 2014 12:27 pm
von Xin
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().

Re: Konstruktur und Destruktur

Verfasst: Fr Mai 23, 2014 4:10 pm
von Chunya
Es funktioniert !
Vielen Dank -:)