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

składnik statyczny w klasie

Ostatnio zmodyfikowano 2014-03-29 21:32
Autor Wiadomość
kitsss
Temat założony przez niniejszego użytkownika
składnik statyczny w klasie
» 2014-03-29 13:28:41
Chce stworzyć składnik statyczny dla mojej klasy, bo wiem, ze wszystkie obiekty (a będzie ich dużo) będą miały taką samą wartość dla jednej danej składowej:
Plik nagłówkowy:
C/C++
#ifndef naglowek_hpp
#define naglowek_hpp

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

class kurczak
{
    bool czy_byl_spr;
    string nazwa;
    static char polozenie;
   
};

char kurczak::polozenie = 'B';


#endif

Uczyniłem go private, bo na pewno nie będę go modyfikować, ale mam problem z ostatnia linijką programu (definicją tego składnika statycznego poza klasą). Kompilator informuje, że mój projekt jest prawdopodonie nieskończony i czy chcę go jeszcze zmodyfikować, gdy klikam nie, otwiera się tylko konsola i nie robi nic, co powinna. (nawet coutów nie pokazuje z maina).

Gdy zniszczę definicję w zakresie pliku(mowa ciągle o ostatniej linijce), wszystko działa jak należy.
P-107393
OczkoSX
» 2014-03-29 13:38:44
Nie możesz od razu przypisać wartości ? static char polozenie = 'B'
P-107396
kitsss
Temat założony przez niniejszego użytkownika
» 2014-03-29 13:51:18
C:\Users\...\naglowek.hpp|14|error: ISO C++ forbids in-class initialization of non-const static member 'kurczak::polozenie'|
||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===|

No wlasnie nie, ale jesli tylko deklaruje, to wszystko działa bezbłędnie:


P-107397
OczkoSX
» 2014-03-29 13:53:15
Spróbuj przed char napisać static
P-107398
kitsss
Temat założony przez niniejszego użytkownika
» 2014-03-29 14:13:59
Tak na pewno nie może być (niezgodność z językiem) :(

C:\Users\...\naglowek.hpp|74|error: 'static' may not be used when defining (as opposed to declaring) a static data member [-fpermissive]|

Dla porównania, ten programik działa, a jest zrobiony identycznie:

C/C++
#include <cstdlib>
#include <iostream>

using namespace std;

class stos
{
    static int k;
public:
   
    void wypisz()
    {
        cout << k << endl;
    }
};

int stos::k = 3000;

int main()
{
    stos obiekt;
    obiekt.wypisz();
   
    system( "PAUSE" );
    return EXIT_SUCCESS;
}

Myśle, że coś nie gra z tym, że tamto jest robione w pliku nagłówkowym...
UP: Tak, to na pewno przez to, przekleiłem nie zmieniając cały ten problematyczny kod do funkcji głównej main usuwając przy tym nagłówek, wszystko działa należycie. Teraz pytanie, co robie nie tak w nagłówkowym przy tworzeniu tego składnika statycznego.
P-107400
OczkoSX
» 2014-03-29 14:22:17
Spróbuj rebuild projektu. PRzepraszam za tamto ale jestem niewyspany i nie ogarniam :D
P-107401
kitsss
Temat założony przez niniejszego użytkownika
» 2014-03-29 14:27:23
Spokojnie ;p
Niestety ciągle ten sam komunikat, że projekt wydaje się niezbudowany i czy chcę go jeszcze zmodyfikować.
P-107402
OczkoSX
» 2014-03-29 17:49:17
Skoro nieudana kompilacja to znaczy że były błędy. Sprawdz logi
P-107418
« 1 » 2
  Strona 1 z 2 Następna strona