Definicja stałej wewnątrz klasy
Ostatnio zmodyfikowano 2013-03-19 08:48
maze Temat założony przez niniejszego użytkownika |
Definicja stałej wewnątrz klasy » 2013-03-16 23:31:39 Hej, mam pytanie do was. Tak wyglada naglowek mojej klasy: #pragma once class Tablica { double * tab; double srd; char nazwa[ rozm ]; int n; public: Tablica( int = 3 ); ~Tablica() { ilosc--; }; void wypelnij(); void wyzeruj(); void wyswietl( int, int ); void insert_sort(); void srednia(); int rozmiar() { return n; }; double * adres() { return tab; }; size_t ilosc_bajtow(); static int ilosc; static const int rozm = 15; };
Na gorze zdeklarowalem tablice nazwa[] ktorej chce nadac staly rozmiar. Myslalem ze bede mogl to zrobic za pomoca stalej statycznej jak zrobilem na dole >> static const int rozm = 15; Niestety kompilator nie akcjeptuje mi tego. Jak moge to zrobic? |
|
Monika90 |
» 2013-03-17 06:49:46 przenieś static const int rozm = 15; przed char nazwa[ rozm ]; Poza tym, w C++ nie ma czegoś takiego jak #pragma once . Używanie size_t wymaga #include <cstddef> , no i powinno to być std::size_t . Nie widzę deklaracji konstruktora kopiującego, ani operatora przypisania, więc Twoja klasa jest prawie na pewno błędna. |
|
pekfos |
» 2013-03-17 13:01:10 Poza tym, w C++ nie ma czegoś takiego jak #pragma once . |
Jest. |
|
usmiech |
» 2013-03-18 21:59:29 Nie ma czegos takiego jak #pragma once ? ciekawe :) A nawiasem mowiac maze /chociaz tez dopiero sie ucze/ moim zdaniem traktujesz klase jak obiekt, a klasy to jakby 'definicja' obiektow. Klasa ma opisywac grupe obiektow, a nie okreslac konkretne wartosci.. Takie ukonkretnienia stosujesz w obiektach wprowadzanych do klasy.Ciekawa jest tez rola zmiennych globalnych, ale to wszystko to temat 'morze'. Pozdrawiam :) |
|
Monika90 |
» 2013-03-19 07:55:41 #pragma once jest niestandardowa, jest tylko w niektórych kompilatorach i ma przenośną alternatywę, jaką są include guards. |
|
Mrovqa |
» 2013-03-19 08:48:36 Musisz definicję zmiennej statycznej umieścić poza klasą i nie może to być w nagłówku, bo jeśli wtedy inkludujesz ten plik wiele razy, to będziesz miał wiele tych zmiennych (linker wyrzuci błąd redefinicji). Klasa.h #pragma once
class Klasa { public: static const int rozm; } Klasa.cpp #include "Klasa.h" const int Klasa::rozm = 15;
I druga uwaga (ktoś wyżej już wspominał): jeżeli klasa sama sobie alokuje pamięć dla wskaźnika, to zaleca się zdefiniowanie konstruktora kopiującego, operatora przypisania oraz destruktora. W przeciwnym wypadku przypisanie obiektu spowoduje tylko przepisanie adresu (a nie zaalokowanie nowej tablicy) i destruktor nie zwolni pamięci - memory leak. |
|
« 1 » |