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


Anmelden zum Antworten