Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 08, 2025 13:52

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Feb 04, 2012 14:41 
Offline
DGL Member

Registriert: Mo Apr 27, 2009 11:19
Beiträge: 35
Hallo alle miteinander,

ich bin gerade etwas verwirrt. Ich habe in einer Klasse A im Konstruktor arrays mit Elementen versehen. Nun wollte ich diese Elemente einer anderen Klasse B nutzen. Ich habe also ein Objekt A a = new A; erstellt und wollte nun mit dem Befehl a->array.value().x darauf zugreifen.
Leider werden mir alle Werte sofort gelöscht sobald ich aus dem Konstruktor raus bin.

Warum ist das so? Ich kann mir das irgendwie nicht erklären.
Vielen Dank für eure Antworten.

EDIT:

Tut mir leid für mein spätes Edit. Ich hoffe jetzt wird die Sache klarer.
Ich definiere ein array mit allen zugehörigen Elementen im Konstruktor einer Klasse A. Nun möchte ich diese Werte in meiner Klasse B nutzen.

Sobald ich aber den Konstruktor in Klasse A verlasse, werden alle Elemente meines Arrays gelöscht. Weiß vielleicht irgendwer woran das liegen könnte?
Unten habe ich nochmal mein Problem in einem sample-Code beschrieben:

Zunächst die Klasse A:
Code:
  1.  
  2. class A()
  3. {
  4.     QVector<Point3d> point_s;  
  5. }
  6.  
  7. A::A()
  8. {
  9.      point_s.resize(5);
  10.      for (int i = 0; i < 5; ++i)
  11.      {
  12.         point_s[i].x = i;
  13.         point_s[i].y = i+1;
  14.         point_s[i].z = i+2;
  15.      }
  16. }
  17.  


In Klasse B möchte ich nun die Werte meines Arrays nutzen. Ich erstelle ein Objekt der Klasse A:

Code:
  1.  
  2. #include "a.h"
  3. #include "c.h"
  4.  
  5. class B : public QGLWidget
  6. {
  7.     Q_OBJECT
  8.     public:
  9.     A *a;
  10.     C *c;
  11.     void paintGL();
  12.     B(QWidget *parent = 0);
  13. }
  14.  
  15. B::B(QWidget *parent) : QGLWidget(parent)
  16. {
  17.     a = new A;
  18.     b = new B;
  19. }
  20.  
  21. void B::paintGL()
  22. {
  23.     glClear(GL_COLOR_BUFFER_BIT);                              
  24.     glMatrixMode(GL_PROJECTION);
  25.     glPushMatrix();
  26.     glLoadIdentity();
  27.     gluPerspective(70, width() / height(), 0.01, 1000);
  28.  
  29.     glMatrixMode(GL_MODELVIEW);
  30.     glPushMatrix();
  31.     glLoadIdentity();
  32.  
  33.     c->draw(a->point_s);
  34.  
  35.     glPopMatrix();
  36.     glMatrixMode(GL_PROJECTION);
  37.     glPopMatrix();
  38.  
  39. }
  40.  


Klasse mag hier sinnlos erscheinen. Ist aber in meinem Programm essentiell.
Code:
  1.  
  2. class C
  3. {
  4. public:
  5.     C();
  6.  
  7.     void draw_points(QVector<Point3d> point);
  8.     void draw(QVector<Point3d> point) const;
  9. };
  10.  
  11. C::C()
  12. {
  13. }
  14.  
  15. void C::draw_points(QVector<Point3d> point)
  16. {
  17.     int count =1;
  18.     double angle= 360/count;                                
  19.  
  20.     for(int i=0;i<5;i++)
  21.     {
  22.         glRotated(angle,0,1,0);
  23.         draw(point);
  24.     }
  25.  
  26. }
  27.  
  28. void C::draw(QVector<Point3d> point) const
  29. {
  30.     for(int i=0; i<point.size(); i++)
  31.     {
  32.        glBegin(GL_POINTS);
  33.        glVertex3f(point.value(i).x,point.value(i).y,point.value(i).z);
  34.        glEnd();
  35.     }
  36. }
  37.  


Ich habe auch schon versucht die Werte mit getter zu erhalten:

In a.cpp:
Code:
  1.  
  2. QVector<Point3d> A::get_m()
  3. {
  4.     return this->point_s;
  5. }
  6.  

In a.h:
Code:
  1.  
  2. QVector<Point3d> get_m();
  3.  

In b.cpp:
Code:
  1.  
  2. b_points = a->get_m();
  3. c->draw(b_points);
  4.  


Wobei das keinerlei Veränderung bringt. Ich versteh das irgendwie nicht.

Ich wäre für eure Hilfe sehr dankbar....


Zuletzt geändert von sportsfreund am Di Feb 07, 2012 12:41, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Feb 04, 2012 15:28 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
In welcher Programmiersprache codest du denn? Kannst du bitte etwas ausführlicher deinen Code (mit Codetags!) posten? Von dem, was du geschrieben hast, kann ich jedenfalls keinen Fehler ableiten.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Feb 04, 2012 16:24 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Ich rate einfach mal: Scope

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 08, 2012 17:47 
Offline
DGL Member

Registriert: So Feb 05, 2012 02:02
Beiträge: 3
Programmiersprache: c++
Nur so ne Vermutung:

Ersetz mal die Zeile "c->draw(a->point_s);"
durch
c->draw(&a->point_s);

und ändere die draw Methode wie folgt ab:
Code:
  1.  
  2. void C::draw_points(QVector<Point3d> & point)
  3. {
  4.     int count =1;
  5.     double angle= 360/count;                                
  6.  
  7.     for(int i=0;i<5;i++)
  8.     {
  9.         glRotated(angle,0,1,0);
  10.         draw(point);
  11.     }
  12.  
  13. }


Ich kenne die Fachbegriffe nicht ganz, aber:

Bei a->point_s übergibts du eine KOPIE. Jeh nachdem wie der Kopierkonstruktor geschrieben ist, ist eine Kopie nicht immer eine wirkliche Kopie.
Deswegen versuch einfach mal mit dem Original zu arbeiten (du liest ja nru also sollte ncihts schlimmes passieren).

Wenn dass auch nciht funktioniert, schreib dir ne getter methode für die anzahl der elemente in point_s und ne getter emthode für das 'n'-te Element von point_s.

Gruß,
Loesil (Wenn du noch fragen hast PM einfach)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]