Koordinaten-Klasse
-
Hi,
ich kenn mich mit Klassendefinitionen noch nicht sehr gut aus und stehe vor folgendem Problem:
Ich soll die 3D-Koordinaten verschiedener Punkte(=Knoten=Nodes) einer Faser(Fiber) in Variablen des Faser-Objekts abspeichern. Jede Faser ist ein Objekt der Klasse "Fiber".Hier mein Code:
Datei "fiber.h":
#ifndef FIBER_H #define FIBER_H class Fiber { public: Fiber(); struct Node { double posX, posY, posZ; }; void setNode(int NodeNumber, double Px, double Py, double Pz); }; #endif
Datei "fiber.cpp":
#include "fiber.h" Fiber::Fiber() { Node *node = new Node[]; } void Fiber::setNode(int NodeNumber, double Px, double Py, double Pz) { node[NodeNumber].posX = Px; node[NodeNumber].posY = Py; node[NodeNumber].posZ = Pz; }
Datei "main.cpp":
#include <iostream> #include <string> using namespace std; #include "fiber.h" int main() { Fiber *fiber1 = new Fiber(); //Bsp. für Punkte: fiber1.setNode(1, 3.0, 3.0, 4.0); fiber1.setNode(2, 3.1, 3.2, 4.1); //... //Bsp. für Abfrage der Daten: cout <<"X=" <<node[1].posX <<" Y=" <<node[1].posY <<" Z=" <<node[1].posZ <<endl; return 0; }
Was ist hier falsch?
desti
-
class Fiber { private: struct Node { double posX, posY, posZ; }; Node* node; std::size_t size; public: Fiber ( std::size_t ); void setNode ( int NodeNumber, double Px, double Py, double Pz ); ~Fiber (); }; Fiber::Fiber ( std::size_t _size ) : size ( _size ) { node = new Node [ size ]; }; void Fiber::setNode( int NodeNumber, double Px, double Py, double Pz ) { if ( NodeNumber < size ) { node[NodeNumber].posX = Px; node[NodeNumber].posY = Py; node[NodeNumber].posZ = Pz; } else throw "was auch immer"; }; Fiber::~Fiber () { delete [] node; };
was auch immer
-
Danke für die schnelle Antwort
Ich hab noch zwei Fehlermeldungen (davor hatt ich sie auch schon):
"main.cpp:18:error: request for member 'setnode' in 'fiber1', which is of non-aggregate type 'Fiber*'"
und "..error: 'node' undeclared..."neuer code:
#include <iostream> using namespace std; class Fiber { private: struct Node { double posX, posY, posZ; }; Node* node; int size; public: Fiber ( int ); void setNode ( int NodeNumber, double Px, double Py, double Pz ); ~Fiber (); }; Fiber::Fiber ( int _size ) : size ( _size ) { node = new Node [ size ]; }; void Fiber::setNode( int NodeNumber, double Px, double Py, double Pz ) { node[NodeNumber].posX = Px; node[NodeNumber].posY = Py; node[NodeNumber].posZ = Pz; }; Fiber::~Fiber () { delete [] node; }; int main() { Fiber *fiber1 = new Fiber(20); //Bsp. für Punkte: fiber1.setNode(1, 3.0, 3.0, 4.0); //<--1.Fehler fiber1.setNode(2, 3.1, 3.2, 4.1); //... //Bsp. für Abfrage der Daten: cout <<"X=" <<node[1].posX <<" Y=" <<node[1].posY <<" Z=" //<--2.Fehler <<node[1].posZ <<endl; return 0; }
später sollen die fiber-Objekte dann noch ein Array bilden (fiber[1].setNode(...) usw)
desti
-
die funktionen jetzt einfach mit -> aufrufen anstatt .
z.b.:int main() { Fiber *fiber1 = new Fiber(20); //Bsp. für Punkte: fiber1->setNode(1, 3.0, 3.0, 4.0); fiber1->setNode(2, 3.1, 3.2, 4.1); //... //Bsp. für Abfrage der Daten: cout <<"X=" <<node[1]->posX <<" Y=" <<node[1]->posY <<" Z=" <<node[1]->posZ <<endl; return 0; }
was auch immer
-
..womit der 1. fehler beseitigt wäre..
-
Hallo,
der zweite Fehler ("..error: 'node' undeclared..." ) resultiert daraus, daß du versuchst, direkt auf node zuzugreifen:
//Bsp. für Abfrage der Daten: cout <<"X=" <<node[1]->posX <<" Y=" <<node[1]->posY <<" Z=" <<node[1]->posZ <<endl;
node ist aber ein (private) Member der Klasse Fiber und damit in main nicht sichtbar.
MfG