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

Definicja stałej wewnątrz klasy

Ostatnio zmodyfikowano 2013-03-19 08:48
Autor Wiadomość
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:

C/C++
#pragma once
class Tablica
{
    double * tab;
    double srd; //srednia elementow
    char nazwa[ rozm ];
    int n; //rozmiar tablicy
   
   
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; //licznik obiektow
    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?
P-78604
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.
P-78609
pekfos
» 2013-03-17 13:01:10
Poza tym, w C++ nie ma czegoś takiego jak
#pragma once
.
Jest.
P-78639
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 :)
P-78816
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.
P-78842
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
C/C++
#pragma once

class Klasa
{
public:
    static const int rozm;
}
Klasa.cpp
C/C++
#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.
P-78843
« 1 »
  Strona 1 z 1