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:
. 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:
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 -:)