Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Tablica wskaźników-get zwraca niepoprawną wartość

Ostatnio zmodyfikowano 2016-10-23 12:47
Autor Wiadomość
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:
C/C++
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:
C/C++
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();
P-152791
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..?
P-152792
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 :)
P-152793
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.
P-152795
skovv
» 2016-10-23 12:41:42
C/C++
double * x = new double,
* y = new double;
// ...
points[ position ] = new CPoint2D( & x, & y );
Można wiedzieć czemu koniecznie wskaźniki?
P-152797
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!
P-152798
« 1 »
  Strona 1 z 1