Wpisanie wskaźnika ze struktury do zmiennej int

0

Witam mam dynamiczną tablice i chce poukładać jej indeks ale mam problem z wpisaniem wskaźnika ze struktury do zmiennej int.

#include <iostream>

struct points {
    char * letter = new char;
    int *A = new int;
    int *B = new int;

    ~points() {
        delete letter;
        delete A;
        delete B;
    }
};

void comparison (points &tabPoints , int size , points &tabSecondary);

int main()
{
    int step = 0;
    int howManyPoints = 0;
    int index = 0;
    std::cin >> step >> howManyPoints;
    int sizeTab = howManyPoints;

    points * tabPoints      =   new points [howManyPoints];
    points * tabSecondary   =   new points [2];
    points * tabSort        =   new points [howManyPoints];

    while (step != 0) {
        while (howManyPoints != 0) {
            std::cin >> *tabPoints[index].letter >> *tabPoints[index].A >> *tabPoints[index].B;
            ++index;
            --howManyPoints;
        }

        --step;
    }
//    tabPoints[0].A = tabPoints[1].B;
    for (int i = 0 ; i < sizeTab ; ++i) {
        std::cout << *tabPoints[i].letter << " " << *tabPoints[i].A << " " << *tabPoints[i].B << std::endl;
    }


    tabPoints->~points();
    delete [] tabPoints;
    return 0;
}

void comparison (points &tabPoints , int size , points &tabSecondary) {
    int max = *tabPoints[0].letter;
    for (int i = 0 ; i < size ; ++i) {
        
    }
} 

chodzi mi o linijkę:

int max = *tabPoints[0].A; 
0

No ale powiedz mi co tutaj chcesz zrobić?: int max = *tabPoints[0].letter;

0
#include <iostream>
using namespace std;

struct point {
    char *letter;
    int *a;
    int *b;

    point():letter(new char), a(new int), b(new int){}

    ~point() {
        delete letter;
        delete a;
        delete b;
    }
};

int main()
{
    point points[1];

    *(points[0].a) = 1;
    *(points[0].b) = 2;
    *(points[0].letter) = 'b';

    char variable = *(points[0].letter);
    cout << variable;

    return 0;
}

Nie wywołuj tak destruktora: tabPoints->~points();!
Sugeruję w ogóle głębiej poczytać o tym wszystkim, bo mam wrażenie, że tak trochę strzelasz na ślepo nie bardzo wiedząc co robić.

0

co do twojego

point():letter(new char), a(new int), b(new int){}

to znaczy ze ja ma źle:

    char * letter = new char;
    int *A = new int;
    int *B = new int; 

A chodzi że chce posegregować tą tablicę od min do max (wiem że źle zrobiłem bo dałem max a muszę zmienić na min)(wiem też że powinienem to na stringu robić było by łatwiej ale jak zacząłem to skończę tak :D ). I tu pojawia się problem na zwykłej tablicy by ją po sortować bierzemy pierwszy element zawsze za min lub max (zależy co szukamy ) i później wszystkie przyrównujemy. Ja muszę zrobić to samo tylko nie wiem jak zrobić by zmienna miała wartość pierwszego elementu tabPoints[0].A(wskaźnika)

Co do destruktora to nie wiem jak tam się znalazł (skasowałem go bo mi pomogłeś we wcześniejszym poście) :D

Tak wiem że muszę poczytać ale teraz wole trochę postrzelać. Bo wcześniej czytałem a to nic nie dało teraz najpierw postrzelam po pytam mądrych ludzi i jak coś zacznę kumać to wgryzę się w temat bo bez praktyki to nic z tych książek nie kumam.

0

Masz dobrze, bo od C++11 tak można: http://en.cppreference.com/w/cpp/language/data_members

A posortować możesz najprostszym algorytmem, którego uczą na studiach czyli bąbelkowo. Tylko zważ, że nie jest to demon szybkości :)

Jakoś tak to chyba było:

#include<iostream>
using namespace std;

int main() 
{
	int tab[]{ 3,4,8,71,2,-1,3,1,6,3 };
	size_t count = sizeof(tab) / sizeof(tab[0]);

	for (unsigned i = 0; i < count; ++i)
	{
		for (unsigned j = i; j < count; ++j)
		{
			if (tab[i] > tab[j]) 
			{
				int temp = tab[i];
				tab[i] = tab[j];
				tab[j] = temp;
			}
		}
	}

	for (int i = 0; i < count; ++i)
		cout << tab[i] << " ";
	cout << "\n";
	return 0;
}
0

main.cpp error: no match for ‘operator[]’ (operand types are ‘points’ and ‘int’)
int max = *tabPoints[i]->A;
^

Taki dostaje komunikat jak chce do zmiennej max zapisać liczbę która siedzi w tablicy
próbowałem z -> ale to samo

0

Należy zastosować np: *(points[0].a), ponieważ points to referencja do struktury, której pola to wskaźniki.Wcześniej to napisałem.

0

Sorry jeszcze dużo muszę się nauczyć a nie wywnioskowałem z twojej wcześniejszej wypowiedzi że to to(ale to przez brak wiedzy)
napisałem coś takiego

 int max = *(tabPoints[i].A);

i dalej mam problem i jak z i wpisze 0 też nie działa

0

Nie działa, ponieważ przekazujesz do funkcji jeden obiekt klasy points, a nie tablicę obiektów. Wszystko przez to, że nazwałeś sobie strukturę reprezentująca punkt w liczbie mnogiej i teraz Ci sie to miesza.

Tablicy w cpp nie musisz przekazywać przez referencję czy wskaźnik, ponieważ jest ona tak przekazywana z definicji. I cale szczęście. Tablica nigdy w cpp nie jest przekazywana przez wartość. Do ciała funkcji kopiowany jest jedynie wskaźnik na początek takiej tablicy.

1

@87kelthuzad:

#include <iostream>
using namespace std;

struct point {
    char *letter;
    int *a;
    int *b;

    point():letter(new char), a(new int), b(new int){}

    ~point() {
        delete letter;
        delete a;
        delete b;
    }
};

// przykład przekazywania tablicy jako argument funkcji.
// ponieważ tablica przekazywana jest przez wskaźnik to przekazać musisz również jej rozmiar
// bo wewnątrz funkcji to: sizeof(points)/sizeof(points[0]) nie zadziała.
void someFoo(point points[], unsigned count)
{
    for(unsigned i = 0; i < count; ++i)
    {
        cout << *(points[i].a) << " " << *(points[i].b) << " " << *(points[i].letter) << "\n";
    }
}

int main()
{
    point points[2];

    *(points[0].a) = 1;
    *(points[0].b) = 2;
    *(points[0].letter) = 'a';

    *(points[1].a) = 3;
    *(points[1].b) = 4;
    *(points[1].letter) = 'b';

    someFoo(points, sizeof(points)/sizeof(points[0]));

    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1