rookie, wie mehr als einen wert über return zurück geben ?
-
hi,
absolute anfänger frage, aber wie bekomme ich mehrere werte von einer
funktion zurück ?void main(double b,double c) { double a = b * c; double z = b / c; return a; } //sowas dürfte ja nicht gehen return a,z; //von php kenne ich void main(double b,double c,double &a,double &z){} /* aber &z ist ja die referenz, also adresse von z, wenn ich das mit den zeigern gerafft habe */
danke little_magic
-
wenn ich mich recht entsinne, gibt es dazu einen ausführlichen faq eintrag
-
hi otze,
sorry, dann sehe ich es nicht.
-
Wer sucht der findet: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39482.html
Caipi
-
danke Caipi,
struct, dann wird das gleich meine nächste übung...
-
wieso? kannst doch auch referenzen nehmen genau wie in php
-
man kann auch mit pair mehrere sachen zurückgeben
-
Würde dafür eher tuple aus boost nehmen, für mehr als 2 Werte.
-
Artchi schrieb:
Würde dafür eher tuple aus boost nehmen, für mehr als 2 Werte.
ist das jetzt besser als std::pair?
ich würde wannimmer irgendwie begründbar struct oder class nehmen.
entweder die funktion hat mehr als nur einen zweck und muss zerschlagen werden, oder sie gibt etwas zurück, was einen sinnvollen namen verdient. Datum heute(); oder virtual Zug Spieler::suchDenBestenZug(Spielbrett const& brett)=0;
-
hi,
und erstmal danke an alle !
das mit dem struct ist mir als anfänger schon mal recht.
zur referenz:
wenn ich z.b. bei 2,3 Werten sowas mache main(double &a,double &z){}
muss ich dann grundsätzlich dereferenzieren ?
also außerhalb der funktion*a; oder *z; anwenden ?
a; oder z; würde ja die adresse beinhalten, also wenn ich zuvor in der
funktion a=0; nicht setzte, also auch eine völlig falsche adresse, ggf.
sogar aus meinem programm, welches dieses zum absturz bringen könnte.gibt es auch vergleichlich zu php sowas wie global vars, also variablen
die außerhalb der funktion sind, jedoch innerhalb der funktion gültigkeit
haben ?little_magic
-
eine referenz zeigt immer auf ein objekt, und bleibt bei dem!
normalerweise musst du bei referenzen auch nicht dereferenzieren!
-
main ist ein denkbar schlechtes Beispiel dafür, da deren Signatur im Standard ziemlich streng festgelegt ist - halt int main() bzw. int main(int, char *[]) - ansonsten sind Referenzen nicht das selbe wie Zeiger. Zum Beispiel:
void square_them(int x, int y) { x *= x; y *= y; } // ... int a = 2, b = 3; square_them(a, b); cout << a << '\n' << b << endl;
-
hi,
danke.
#Oxdeadbeef
da habe ich wohl noch was nicht gerafft, wo ist denn der unterschied zwischen:
*pointer_a = b;
oder
*pointer_a = &b;
kannst du x *= x; näher erklären, ich dachte der dereferenzierungsoperator gilt nur für die nächste variable, nur vor dem = zeichen ?
das mit dem main habe ich gerade bei meinem ersten prog gemerkt.
nur cout meckert noch (DEV-C++), warum ?
#include <iostream> using namespace std; main (int t,double &h) { int c=1485; h=c*t/2; } cout << "Bitte geben Sie die Zeitdifferenz \"t\" ein:\n"; cin >> t; main(t,h); cout << h << "m\n"; getch();
little_magic
-
x*=x hat nix mit zeigern zu tun!
Das ist das selbe wie x=x*x; (muliplikation);
ein pointer muss immer auf eine adresse zeigen, darum
*pointer_P = &a!
-
hi 5er1al,
ups, klaro (muliplikation);
-
achso, und dein code sieht komisch aus!
Irgendwie is in derine main garnix!
oder is das ne eigene funktion? (geht glaub ich netmal)!Main wird imemr von win aufgerufen!
Sollte schon alles drin stehen in der main (cout einfach so ausserhalb von main geht net)
-
hi,
raff ich nett, ich muss doch zuerst den cout bzw. cin haben.
dann die funktion die rechnet und zurück gibt ?
gut, nennen wir die funktion test, dass main sowas spezielles ist,
war mir nicht bewußt.
-
und was is die fehlermeldung?
-
hi,
also auch wenn ich die funktion weg lasse, also
#include <iostream> using namespace std; double t=0; cout << "Bitte geben Sie die Zeitdifferenz \"t\" ein:\n"; cin >> t; int c=1485; double h=c*t/2; cout << h << "m\n"; getch();
kommt bei der 1. zeile von cout:
echolot.cpp expected constructor, destructor, or type conversion before '<<' token
-
so geht es bei mir:
#include <iostream> #include <conio> using namespace std; //--------------------------------------------------------------------------- #pragma argsused void tmain (int t,double &h) { int c=1485; h=c*t/2; } int main(int argc, char* argv[]) { int t; double h=0; cout << "Bitte geben Sie die Zeitdifferenz \"t\" ein:\n"; cin >> t; tmain(t,h); cout << h << "m\n"; getch(); return 0; } //---------------------------------------------------------------------------