Problem z kompilacją

0

Witam. Uprzedzam że nie dawno zacząłem przygodę z c++ więc proszę o wyrozumiałość
Mam taką treść zadania:

  1. Zadeklaruj typy złożone z pól char* imię, int wiek i bool plec wykorzystując:
    – technikę tworzenia struktur,
    – technikę tworzenia klas.
    następnie utwórz obiekty tych typów i odwołaj się do ich pól. Jaka jest różnica pomiędzy tymi odwołaniami?

  2. Zdefiniuj klasę Hermetyzacja zawierającą pola w dostępnych sekcjach hermetyzacyjnych. Następnie przedstaw aplikację która pokaże wszystkie dozwolone i zabronione metody dostępu do zdefiniowanych pól.

  3. Przygotuj klasę Osoba z polami char* imię i int wiek. Następnie utwórz dwa obiekty zdefiniowanej klasy, używając konstruktorów wykorzystujących mechanizmy: dynamicznego alokowania pamięci oraz lokalnej definicji.

  4. Rozwiń definicje klasy Osoba o konstruktor:

    • pusty – wyprowadza wartość pól do dynamicznie alokowanych zasobów,
    • przyjmuje dwa parametry (char*, int) inicjując pola przez listę inicjacyjną.
      Oba z konstruktorów powinny wyświetlać na ekranie informacje o utworzeniu obiektu Osoba. Dodefiniuj destruktor, wyświetlający informacje o zniszczeniu obiektu i zwalniającym dynamicznie zaalokowane zasoby.
      W ciele funkcji main przedstaw tworzenie obiektów powyższej klsay z użyciem obu typów konstruktorów.
  5. Wykorzystując operator new, utwórz obiekty klasy Osoba i używając funkcji show wyświetl zawarte w nim pola. Utwórz odnośnik ref do tego obiektu, a następnie utwórz nowy obiekt klasy Osoba dostarczając jako parametr konstruktora odnośnika ref. Ponownie wyświetl stany pól wszystkich utworzonych obiektów. Usuń pierwszy z utworzonych obiektów i wyświetl stan pól pozostałego obiektu.

  6. Na przykładzie klasy Osoba przedstaw mechanizm zaprzyjaźniania funkcji definiując zewnętrzną funkcję void show() wyświetlającą stan pól klasy.

A oto kod:

#include <cstdlib>
#include <iostream>

using namespace std;
class Osoba{
      char* imie;
      int wiek;
      
    public:
        Osoba(){
                     char input[100];
                     cout << "Podaj imie: ";
                     cin >> input;
                     *imie = new char[ strlen(input) +1];
                     memcpy( imie, input, strlen(input) +1);
                     cout << "Podaj wiek: ";
                     cin >> wiek;
                     cout << "Utworzono obiekt." << endl;
                     }
             Osoba(char* imie, int wiek){
                         this->imie = new char[ strlen(imie) +1];
                         memcpy( this->imie, imie, strlen(imie)+1);
                         this->wiek=wiek;
                         cout << "Utworzono obiekt." << endl;
                         }
             Osoba(Osoba &o){
                         this->imie = new char [strlen(o.imie) +1];
                         memcpy( this->imie, o.imie, strlen(o.imie)+1);
                         wiek=o.wiek;
                         }
             ~Osoba(){
                      cout << "Skasowano obiekt." << endl;
                      delete[] imie;
                      }
             void show(){
                  cout<<"Imie: "<<imie<<endl;
                  cout<<"Wiek: "<<wiek<<endl;
                  }
                  friend void show (Osoba &p);
};
void show (Osoba &p){
     cout<<p.wiek<<endl;
     cout<<p.imie<<endl;
     }
     
                     
      
      
int main(int argc, char *argv[])
{
    
    Osoba* o = new Osoba();
    o->show();
    Osoba &ref = *o;
    Osoba* o1 = new Osoba(ref);
    o->show();
    o1->show();
    
    delete o;
    o1->show();
    
    system("PAUSE");
    return EXIT_SUCCESS;
} 

I tak oto z bliżej nie wyjaśnionych przyczyn nie wiem czemu podczas kompilacji wywala mi błąd. Proszę o pomoc.

0

Usuń gwiazdkę w tej lini:

*imie = new char[ strlen(input) +1];
0

Niestety to nie to... :/ Nadal jest błąd w tym samym miejscu czyli:

  imie = new char[ (input) +1];

przed (input)

0

nie możliwe. U mnie działa poprawnie. Usunąłeś

strlen

czy w poście nie dopisałeś?

#include <cstdlib>
#include <iostream>
 
using namespace std;
class Osoba{
      char* imie;
      int wiek;
 
    public:
        Osoba(){
                     char input[100];
                     cout << "Podaj imie: ";
                     cin >> input;
                     imie = new char[ strlen(input) +1];
                     memcpy( imie, input, strlen(input) +1);
                     cout << "Podaj wiek: ";
                     cin >> wiek;
                     cout << "Utworzono obiekt." << endl;
                     }
             Osoba(char* imie, int wiek){
                         this->imie = new char[ strlen(imie) +1];
                         memcpy( this->imie, imie, strlen(imie)+1);
                         this->wiek=wiek;
                         cout << "Utworzono obiekt." << endl;
                         }
             Osoba(Osoba &o){
                         this->imie = new char [strlen(o.imie) +1];
                         memcpy( this->imie, o.imie, strlen(o.imie)+1);
                         wiek=o.wiek;
                         }
             ~Osoba(){
                      cout << "Skasowano obiekt." << endl;
                      delete[] imie;
                      }
             void show(){
                  cout<<"Imie: "<<imie<<endl;
                  cout<<"Wiek: "<<wiek<<endl;
                  }
                  friend void show (Osoba &p);
};
void show (Osoba &p){
     cout<<p.wiek<<endl;
     cout<<p.imie<<endl;
     }
 
 
 
 
int main(int argc, char *argv[])
{
 
    Osoba* o = new Osoba();
    o->show();
    Osoba &ref = *o;
    Osoba* o1 = new Osoba(ref);
    o->show();
    o1->show();
 
    delete o;
    o1->show();
 
    system("PAUSE");
    return EXIT_SUCCESS;
} 

Jakiego kompilatora używasz?
Ja użyłem Visual Studio 2010 Prof.
Pokaż błędy kompilacji.

0

Używam DEV C++

A błędy są następujące:
D:\PJWSTK\Semestr 3\PJC\Zadania\Zjazd5\zad2\main.cpp In constructor 'Osoba::Osoba()':
14 39 D:\PJWSTK\Semestr 3\PJC\Zadania\Zjazd5\zad2\main.cpp [Error] expression in new-declarator must have integral or enumeration type
15 55 D:\PJWSTK\Semestr 3\PJC\Zadania\Zjazd5\zad2\main.cpp [Error] 'strlen' was not declared in this scope
15 59 D:\PJWSTK\Semestr 3\PJC\Zadania\Zjazd5\zad2\main.cpp [Error] 'memcpy' was not declared in this scope
D:\PJWSTK\Semestr 3\PJC\Zadania\Zjazd5\zad2\main.cpp In constructor 'Osoba::Osoba(char*, int)':
21 60 D:\PJWSTK\Semestr 3\PJC\Zadania\Zjazd5\zad2\main.cpp [Error] 'strlen' was not declared in this scope
22 66 D:\PJWSTK\Semestr 3\PJC\Zadania\Zjazd5\zad2\main.cpp [Error] 'memcpy' was not declared in this scope
In copy constructor 'Osoba::Osoba(Osoba&)':
27 62 D:\PJWSTK\Semestr 3\PJC\Zadania\Zjazd5\zad2\main.cpp [Error] 'strlen' was not declared in this scope
28 70 D:\PJWSTK\Semestr 3\PJC\Zadania\Zjazd5\zad2\main.cpp [Error] 'memcpy' was not declared in this scope
D:\PJWSTK\Semestr 3\PJC\Zadania\Zjazd5\zad2\Makefile.win [Error] [main.o] Error 1 (if this is the only error: please check your library includes)

0

dodaj na początku

#include <stdio.h>
#include <string>
0

Nadal nie... I nadal te same błędy :/

0

Nie dopisałem .h. Nie wiem czy ma to znaczenie w devie. Niestety nigdy z niego nie korzystałem.

#include <string.h>

Twoje błędy świadczą o braku deklaracji funkcji strlen i memcp. Są one w pliku <string.h> jesli to nie zadziała to nie wiem co jest nie tak.
Tutaj masz link do tych funkcji
http://www.cplusplus.com/reference/cstring/memcpy/

0

Moje gratulacje :) to było to

Dziękuję bardzo za pomoc :)

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