Wskaźnik struktury na wskaźnik tablicy
Ostatnio zmodyfikowano 2014-10-07 21:16
wiktor12348 Temat założony przez niniejszego użytkownika |
Wskaźnik struktury na wskaźnik tablicy » 2014-10-03 20:00:31 Witam, Jak wygląda problem aplikacji: Posiadam struktury (np. z danymi personalnymi "człowieka"), pamięć ma być przydzielona dynamicznie. Po przydzieleniu pamięci, wypełniam komórki poprawnymi danymi. Ostatnim krokiem jest przechowywanie wszystkich osób w jakiś sensowny sposób - stwierdzam że takim będzie tablica na wskaźnikach. Tzn. komórka tablicy wskazuje na kolejne struktury. Wcześniej używałem list jedno/dwu kierunkowych, jednak w tym przypadku nie potrzebuje ich. Problem mam gdzieś logiczno-tereotyczny. Powiem szczerze c++ to nie moja bajka, powróciłem do niego po kilku miesięcznej przerwie, na co dzień rzeźbie w technologiach webowych a tam wiele rzeczy jest zaniedbywanych lub działają troszkę inaczej. Kodzik: #include<iostream> #include<string> using namespace std;
struct klient { char imie[ 20 ]; char nazwisko[ 20 ]; int dzien; int miesiac; int rok; }; klient * * TabKlient[]; int IloscKlientow = 0;
void DodajKlienta() { klient * addKlient; addKlient = new klient; cout << "Dodaj klienta" << endl; cout << "Imie" << endl; cin >> addKlient->imie; cout << "Nazwisko" << endl; cin >> addKlient->nazwisko; cout << "Data urodzenia (dd.mm.yyyy)" << endl; cin >> addKlient->dzien; cin.ignore( 2, '.' ); cin >> addKlient->miesiac; cin.ignore( 2, '.' ); cin >> addKlient->rok; TabKlient[ IloscKlientow ] =& addKlient; ++IloscKlientow; }
visual studio zwraca mi błąd: 1>c:\users\wiktor\documents\visual studio 2012\projects\firstaplication\firstaplication\main.cpp(40): error C2440: '=' : cannot convert from 'klient **' to 'klient ***'
|
|
Monika90 |
» 2014-10-03 20:24:47 #include <vector>
std::vector < klient > klienci;
klient nowy; std::cin >> nowy.imie; klienci.push_back( nowy );
|
|
wiktor12348 Temat założony przez niniejszego użytkownika |
» 2014-10-03 21:37:08 Dziękuje, ale lecisz tutaj na kontenerach. Zapomniałem uwzględnić dość ważnej rzeczy. Zadanie te jest robione na laboratoriach na których poznajemy "magie obiektówki". Mam wykonać te zadanie mało zaawansowanymi metodami by później spektakularny sposób wykonać to szybko i "pięknie" pod okiem psora. Też mi się to nie podoba ale co zrobić. Mam użyć struktur, tablic, pamięci dynamicznej oraz wskaźników. Użyjemy coś więcej za karę mamy wyrywane paznokcie. Ma to pewnie nam coś pokazać/udowodnić. |
|
michal11 |
» 2014-10-03 22:38:50 #include<iostream> #include<string> using namespace std;
struct klient { char imie[ 20 ]; char nazwisko[ 20 ]; int dzien; int miesiac; int rok; }; const liczbaKlientow = 10; klient * TabKlient[ liczbaKlientow ]; int IloscKlientow = 0;
void DodajKlienta() { klient * addKlient = new klient; cout << "Dodaj klienta" << endl; cout << "Imie" << endl; cin >> addKlient->imie; cout << "Nazwisko" << endl; cin >> addKlient->nazwisko; cout << "Data urodzenia (dd.mm.yyyy)" << endl; cin >> addKlient->dzien; cin.ignore( 2, '.' ); cin >> addKlient->miesiac; cin.ignore( 2, '.' ); cin >> addKlient->rok; TabKlient[ IloscKlientow ] = addKlient; ++IloscKlientow; }
Tak chyba powinno działać. |
|
libed |
» 2014-10-05 20:49:59 klient * * TabKlient[]; To jest tablica wskaźników na wskaźnik,a Ty potrzebujesz tablicy wskaźników klient * tablica[]; , lub moim zdaniem lepsze rozwiązanie - tablicy obiektów. klient tablica[]; |
|
wiktor12348 Temat założony przez niniejszego użytkownika |
» 2014-10-07 17:29:35 A no robiłem tak: klient * TabKlient[]; ...
TabKlient[ IloscKlientow ] =& addKlient;
i wywala błąd:
1>c:\users\wiktor\documents\visual studio 2012\projects\firstaplication\firstaplication\main.cpp(40): error C2440: '=' : cannot convert from 'klient **' to 'klient *'
jak usunąłem z deklaracji tybalicy * a przy przypisie & to mam błąd: 1>c:\users\wiktor\documents\visual studio 2012\projects\firstaplication\firstaplication\main.cpp(40): error C2679: binary '=' : no operator found which takes a right-hand operand of type 'klient *' (or there is no acceptable conversion)
|
|
stryku |
» 2014-10-07 17:35:44 to usuń samo & klient * TabKlient[]; ...
TabKlient[ IloscKlientow ] = addKlient;
Powinno hulać |
|
Jacob99 |
» 2014-10-07 17:38:28 addKlient jest wskaźnikiem na dynamicznie tworzony obiekt klient. Ty chcesz chyba do tablicy dodać adres tego obiektu, a nie samego wskaźnika, więc po co używasz operatora wyłuskania w tym : TabKlient[ IloscKlientow ] =& addKlient;
|
|
« 1 » 2 |