Tablica wskaźników-get zwraca niepoprawną wartość
Ostatnio zmodyfikowano 2016-10-23 12:47
Kaos Temat założony przez niniejszego użytkownika |
Tablica wskaźników-get zwraca niepoprawną wartość » 2016-10-23 12:14:56 Witam, Stworzyłam tablicę wskaźników, w której przechowuję wskaźniki obiekty klasy CPoint2D (która przechowyje dwa wskaźniki na x i y). Przy wywołaniu getX lub getY zwraca wartość nie jest wartością X, lecz wynosi -9.25596e+61. Jeżeli jednak metodę getX wywołam w miejscu, gdzie tworzę punkt, działa ona poprawnie. Poniżej zamieszczam kod sprawiający problem. Będę bardzo wdzięczna za każdą pomoc. Klasa CPoint2D: CPoint2D::CPoint2D( double * xx, double * yy ) { x = xx; y = yy; }
CPoint2D::CPoint2D( CPoint2D & copy ) { x = copy.x; y = copy.y; }
CPoint2D::~CPoint2D() { }
double CPoint2D::getX() { return * x; }
double CPoint2D::getY() { return * y; }
void CPoint2D::setPoint( double * xx, double * yy ) { x = xx; y = yy; } wywołanie i tworzenie punktu: void Interfejs::createPoint() { int position; double x, y; cin >> position >> x >> y; if( position >= 0 && position < sizePoint ) { cout << position << endl; points[ position ] = new CPoint2D( & x, & y ); cout << points[ position ] << endl; cout << "DONE" << endl; } else cout << "ERROR" << endl; } void Interfejs::getPointX() { int position; cin >> position; if( position >= 0 && position < sizePoint && points[ position ] != nullptr ) { cout << position << endl; cout <<(( * points[ position ] ).getX() ) << endl; cout << points[ position ] << endl; } else cout << "ERROR" << endl; }
Interfejs start; start.createPoint(); start.getPoinyX(); |
|
pekfos |
» 2016-10-23 12:20:19 Twoje wskaźniki tracą ważność po wyjściu z funkcji. Jaki w ogóle masz interes, by używać tu wskaźników..? |
|
skovv |
» 2016-10-23 12:20:59 Podajac argumenty x i y przy tworzeniu klasy nir uzywasz float, tylko wskaznikow na zmienne. Zmienna kaput(bo lokalna) tak i Twoje cordy :) |
|
Kaos Temat założony przez niniejszego użytkownika |
» 2016-10-23 12:35:00 Jak mogę to zmienić, jeżeli składowe mają zostać zapamiętane jako dwa wskaźniki na typ double? Jestem zupełnie zielona w C++, stąd też nie rozumiem wielu mechanizmów. |
|
skovv |
» 2016-10-23 12:41:42 double * x = new double, * y = new double;
points[ position ] = new CPoint2D( & x, & y );
Można wiedzieć czemu koniecznie wskaźniki? |
|
Kaos Temat założony przez niniejszego użytkownika |
» 2016-10-23 12:47:36 Takie polecenie zadania :) Bardzo Wam wszystkim dziękuję za pomoc i wyjaśnienia! |
|
« 1 » |