ayya Temat założony przez niniejszego użytkownika |
[C++] "Dynamiczna alokacja pamięci. " » 2019-05-14 23:17:01 Witam, mam problem z kodem a mianowicie "casem 3" gdzie nie mam pojęcia co oznacza pokazany błąd. Próbowałem już wiele kombinacji, jednak nic nie zadziałało. Opcja ma wyświetlać dane, czyli po ich wcześniejszym usunięciu powinny wyskoczyć jakieś śmieci? Treść błędu: main.cpp|40|error: request for member 'wyswietl' in '*(osoby + ((sizetype)(((unsigned int)i) * 4u)))', which is of pointer type 'baza*' (maybe you meant to use '->' ?)| main.cpp #include <iostream> #include "klasa.h" #include <fstream> #include <cstdlib>
using namespace std; int main() { class baza ** osoby = NULL; int i; char znak; cout <<( "\nMenu" ); cout <<( "\n1. Pobierz dane" ); cout <<( "\n2. Usun dane" ); cout <<( "\n3. Wyswietl dane" ); cout <<( "\n4. Koniec" ); do { fflush( stdin ); printf( "\nWybor: " ); scanf( "%c", & znak ); switch( znak ) { case '1': osoby = new baza *[ 3 ]; for( int i = 0; i < 3; i++ ) { osoby[ i ] = new baza( "Adam", "Nowak", "1" ); } break; case '2': for( int i = 0; i < 3; i++ ) { delete osoby[ i ]; } delete[] osoby; break; case '3': for( int i = 0; i < 3; i++ ) osoby = new baza *[ 3 ]; osoby[ i ].wyswietl(); break; } } while( znak != '4' ); return 0; };
klasa.cpp
#include <iostream> #include "klasa.h" #include <fstream> #include <string.h>
using namespace std; void baza::wyswietl( const char * i, const char * n, const char * t ) { cout << "Dane osobowe\n"; cout << "\tImie: " << this->imie << "\n"; cout << "\tNazwisko: " << this->nazwisko << "\n"; cout << "\tTelefon: " << this->telefon << "\n"; };
baza::baza( const char * i, const char * n, const char * t ) { cout << "Wprowadzam:\n"; strcpy( this->imie, i ); strcpy( this->nazwisko, n ); strcpy( this->telefon, t ); cout << "\tImie: " << this->imie << "\n"; cout << "\tNaz.: " << this->nazwisko << "\n"; cout << "\tTel.: " << this->telefon << "\n"; }; baza::~baza() { cout << "Usuwam:\n"; cout << "\tImie: " << this->imie << "\n"; cout << "\tNaz.: " << this->nazwisko << "\n"; cout << "\tTel.: " << this->telefon << "\n"; };
klasa.h
#include <iostream> #include <fstream> #include <string.h> using namespace std; class baza { private: char imie[ 10 ]; char nazwisko[ 25 ]; char telefon[ 10 ]; public: void wyswietl( const char * i, const char * n, const char * t ); baza( const char * i, const char * n, const char * t ); ~baza(); }; [ \c pp ]
|
|
Jacob99 |
» 2019-05-14 23:24:54 Masz wyraźnie wskazane, że próbujesz dostać się do funkcji składowej wyświetl za pomocą notacji '.' zamiast '->'. Spróbuj zmienić osoby[ i ].wyswietl() na osoby[ i ]->wyswietl() |
|
nanoant20 |
» 2019-05-14 23:46:53 w klasa.cpp void baza::wyswietl( const char * i, const char * n, const char * t ) to samo w klasa.h void wyswietl( const char * i, const char * n, const char * t ); za dużo argumentów wystarczy void baza::wyswietl()
public : void wyswietl();
case '3':
for( int i = 0; i < 3; i++ ) osoby = new baza *[ 3 ];
osoby[ i ].wyswietl();
break;
|
|
ayya Temat założony przez niniejszego użytkownika |
» 2019-05-15 00:22:45 Po zamianie "." na "->" ruszyło, argumenty już sam powywalałem. Pozostało teraz dodać, żeby po usunięciu danych, nie wyświetlały się śmieci, tylko komunikat o braku. |
|
nanoant20 |
» 2019-05-15 09:40:19 Pozostało teraz dodać, żeby po usunięciu danych, nie wyświetlały się śmieci, tylko komunikat o braku. |
najprościej, taki prymitywny sposób bez wiekszego przerabiania kodu public: void wyczysc() { memset( imie, ' ', sizeof( imie ) ); memset( nazwisko, ' ', sizeof( nazwisko ) ); memset( telefon, ' ', sizeof( telefon ) ); imie[ 0 ] = 0; nazwisko[ 0 ] = 0; telefon[ 0 ] = 0; }
case '1': osoby = new baza *[ 3 ]; osoby[ 0 ] = new baza( "Adam", "Nowak1", "10" ); osoby[ 1 ] = new baza( "Piotr", "Kefas", "1" ); osoby[ 2 ] = new baza( "Filip", "z Betsaidy", "8" ); break;
case '2': for( int i = 0; i < 3; i++ ) { osoby[ i ]->wyczysc(); delete osoby[ i ]; } delete[] osoby; break;
dla komunikatu coś może takiego; void wyswietl() { if(( imie != NULL ) &&( imie[ 0 ] == '\0' ) ) { cout << "brak danych" << endl; } else { cout << "Dane osobowe\n"; cout << "\tImie: " << this->imie << "\n"; cout << "\tNazwisko: " << this->nazwisko << "\n"; cout << "\tTelefon: " << this->telefon << "\n"; } }
pomimo tych sztuczek, uważam, że kod należałoby przebudować |
|
« 1 » |