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

Wskaźnik struktury na wskaźnik tablicy

Ostatnio zmodyfikowano 2014-10-07 21:16
Autor Wiadomość
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:

C/C++
#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>>addKlient->miesiac>>addKlient->rok;
    cin >> addKlient->dzien;
    cin.ignore( 2, '.' );
    cin >> addKlient->miesiac;
    cin.ignore( 2, '.' );
    cin >> addKlient->rok;
    //cout<<addKlient->imie<<"\t"<<addKlient->nazwisko<<"\t"<<addKlient->dzien<<"\t"<<addKlient->miesiac<<"\t"<<addKlient->rok<<endl;
    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 ***'
P-117888
Monika90
» 2014-10-03 20:24:47
C/C++
#include <vector>

std::vector < klient > klienci;

klient nowy;
std::cin >> nowy.imie;
klienci.push_back( nowy );
P-117890
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ć.
P-117897
michal11
» 2014-10-03 22:38:50
C/C++
#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>>addKlient->miesiac>>addKlient->rok;
    cin >> addKlient->dzien;
    cin.ignore( 2, '.' );
    cin >> addKlient->miesiac;
    cin.ignore( 2, '.' );
    cin >> addKlient->rok;
    //cout<<addKlient->imie<<"\t"<<addKlient->nazwisko<<"\t"<<addKlient->dzien<<"\t"<<addKlient->miesiac<<"\t"<<addKlient->rok<<endl;
    TabKlient[ IloscKlientow ] = addKlient;
    ++IloscKlientow;
}

Tak chyba powinno działać.
P-117901
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[];
P-118007
wiktor12348
Temat założony przez niniejszego użytkownika
» 2014-10-07 17:29:35
A no robiłem tak:

C/C++
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)
P-118063
stryku
» 2014-10-07 17:35:44
to usuń samo &
C/C++
klient * TabKlient[];
...

TabKlient[ IloscKlientow ] = addKlient;
Powinno hulać
P-118066
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 :
C/C++
TabKlient[ IloscKlientow ] =& addKlient; //& jest zbedny
P-118067
« 1 » 2
  Strona 1 z 2 Następna strona