[c++] Dynamiczna alokacja tablicy w klasie.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
wilek
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 17 wrz 2006, 22:33
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME

[c++] Dynamiczna alokacja tablicy w klasie.

Post autor: wilek »

Witam!

Podczas kompilacji tego kodu mam kilka błędów,

Kod: Zaznacz cały

#include<iostream>
using namespace std;
class wybor
{
	public:
        int rozmiar = 5;
		int *liczby = new int[rozmiar];
};

int main()
{
		
}
i niestety mam takie błędy:
sort.cpp:9: error: ISO C++ forbids initialization of member ?rozmiar?
sort.cpp:9: error: making ?rozmiar? static
sort.cpp:9: error: ISO C++ forbids in-class initialization of non-const static member ?rozmiar?
sort.cpp:10: error: ?wybor::rozmiar? cannot appear in a constant-expression
sort.cpp:10: error: `new' cannot appear in a constant-expression
sort.cpp:10: error: ISO C++ forbids initialization of member ?liczby?
sort.cpp:10: error: making ?liczby? static
sort.cpp:10: error: invalid in-class initialization of static data member of non-integral type ?int*?
gdy deklaruje tą tablice w mainie to nie ma błędów żadnych.
jackweb
Piegowaty Guziec
Piegowaty Guziec
Posty: 3
Rejestracja: 31 mar 2006, 21:14
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: [c++] Dynamiczna alokacja tablicy w klasie.

Post autor: jackweb »

1. Przy definiowaniu pól klasy nie wykonasz żadnego funkcji (tudzież new), więc musisz je uruchomić w jakiejś metodzie, najlepiej w konstruktorze, specjalnie do tego przeznaczonym przecież.
2. Spotkałem się z błędem przy nadawaniu domyślnych wartości pól klasy, więc ustawiłem je w konstruktorze; innym sposobem jest dodanie dwóch magicznych słów przy definiowaniu pola rozmiar - const static.
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [c++] Dynamiczna alokacja tablicy w klasie.

Post autor: mikolajs »

2. Spotkałem się z błędem przy nadawaniu domyślnych wartości pól klasy, więc ustawiłem je w konstruktorze;
Nie można inicjowaći pól klasy w jej definicji - nie jest to żaden błąd, być może pomyliło Ci się z Javą lub C#
Dodanie const static powoduje, że wszytkie obiekty klasy będą mieć jedeno wspólne pole i nie można zmienić jego wartości.
jackweb
Piegowaty Guziec
Piegowaty Guziec
Posty: 3
Rejestracja: 31 mar 2006, 21:14
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: [c++] Dynamiczna alokacja tablicy w klasie.

Post autor: jackweb »

mikolajs: no jedyna ta wada, że nie można zmieniać zawartości pola. Co proponujesz wzamian? Punkt pierwszy czy jak?
clansman5
Sędziwy Jeż
Sędziwy Jeż
Posty: 77
Rejestracja: 06 sty 2009, 10:59
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: [c++] Dynamiczna alokacja tablicy w klasie.

Post autor: clansman5 »

zdecydowanie punkt 1. W przypadku 2. zmienna statyczna jest wspolna dla wszystkich obiektow utworzonych na podstawie definicji klasy.
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [c++] Dynamiczna alokacja tablicy w klasie.

Post autor: mikolajs »

mikolajs: no jedyna ta wada, że nie można zmieniać zawartości pola. Co proponujesz wzamian? Punkt pierwszy czy jak?
Wszystko zależy od tego co chce się uzyskać. Powyższy kod równie dobrze moża by zastąpić

Kod: Zaznacz cały

int liczby[5]
Oczywiście standardowe rozwiązanie to inicjacja zmiennej i tworzenie tablicy w konstruktorze. Jeżeli rozmiar liczby[] miałby się zmieniać to należałoby w razie potrzeby utworzyć nową tablicę i kopiować jej zawartość (oczywiście zwalniając starą), jednak w takim wypadku lepiej użyć wektora.
Użycie stałej statycznej też może być dobre jeżeli chcemy odczytywać z klasy rozmiary tablicy o stałej wielkości. (ale w tym przypadku i tak wolałbym użyć wektora :) )
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości