[C++]Strukturen und Funktionen

blubber

Erfahrenes Mitglied
Hi,

hab grad ein Problem in C++. Und zwar habe ich eine Struktur definiert wie folgt:

struct coordinaten{
float valueX;
float valueY;
float valueZ;
};
struct coordinaten point;

Ziel ist es nun, eine Funktion zu schreiben, welche die 3 Koordinaten einliesst, und wieder als Datenstruktur zurückgibt.
Also irgendwie so !?

point = funktion(...);

Und dann soll man eben
point.valueX
point.valueY
point.valueZ
zur Verfügung haben....oder so ähnlich !?

bye
 
Code:
struct coords{
	float valueX;
	float valueY;
	float valueZ;
};

struct coords* rueckgabe(float temp1,float temp2,float temp3){
 struct coords* cTemp;

 cTemp=(struct coords*)malloc(sizeof(struct coords));
 cTemp->valueX=temp1;
 cTemp->valueY=temp2;
 cTemp->valueZ=temp3;

 return cTemp;
}

int main(){
  struct coordinaten* point;

  point=rueckgabe(2.0f); 

  free(point);
return 0;
}
Die Struktur in der Funktion muss dynamisch im Heap (per malloc) angelegt werden, da die Struktur sonst nicht ausserhalb zugängig wäre.
 
Hi,

erstmal danke für die Antwort.

Da ich ziemlich am Anfang meiner C++ Kenntnisse stehe, kapier ich leider die Hälfte nicht von deinem Code ;)
Es fängt schon damit an, dass ich die Eingabe der Koordinaten mittels scanf realisieren muss (andere Wege kenne ich noch nicht). Könntest du das evtl nochmals in "simplen" Code posten? ;)

bye
 
Das dort oben war ANSI C - Code ... hab voll übersehen, dass Du ja was für C++ haben wolltest!

Ich versuchs nochmal :)

PHP:
#include <iostream>//Datei mit Ein/Ausgabe-Funktionen
using namespace std;//Ein/Ausgabe-Funktions-Aufrufe einfacher gestalten

struct coords{
	float valueX;
	float valueY;
	float valueZ;
};

coords* rueckgabe(float temp1,float temp2){
 coords* cTemp;//Zeiger auf eine neue Struktur

 cTemp=new coords;//neue Struktur im HEAP (dynamischer Speicherbereich)

 cTemp->valueX=temp1;// aus (*cTemp).valueX wird cTemp->valueX
 cTemp->valueY=temp2;

 return cTemp;//erstellte Struktur zurückliefern
}

int main(){
  coords* point;
  float fZahl1,fZahl2;

  cout <<"Zahl 1:";//Ausgabe
  cin >>fZahl1;//Eingabe
  cout <<"Zahl 2:";
  cin >>fZahl2;

  point=rueckgabe(fZahl1,fZahl2); 

  delete[] point;//mit new reservierter speicherbereich wieder freigeben
return 0;
}
 
Hi,

muss ich da unbedingt auf Zeiger zurückgreifen?

Kann ich nicht einfach irgendwie mittels

return point;

oder so die Datenstruktur zurückgeben?

bye
 
Es würde noch mit dem Referenz-Operator funktionieren.

btw: Klassen haben immer Konstruktoren, Destruktoren etc...Strukturen sind immernoch einfach um Daten im Speicher strukturiert abzulegen!
 
@Thomas Kuse:
Also diesen Stil finde ich einfach nur schlecht.
new/malloc machst du in einer funktion und delete/free im hauptprogramm.
Und du hast noch nicht mal einen Hinweis gegeben das es so unueblich ist.
Man sollte reservierten Speicher immer da freigeben wo man den reserviert hat.
Denn angenommen, die Funktion rueckgabe aus unserem Beispiel kommt aus einer Bibliothek und diese hat eine andere Speicherverwaltung, dann wird der Speicher womoeglich falsch freigegeben.
 
Zurück