• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Niezdefiniowana referencja do składowej klasy

VPS Starter Arubacloud
0 głosów
251 wizyt
pytanie zadane 29 stycznia 2017 w C i C++ przez czujek22 Dyskutant (7,670 p.)

Mam mały problem. Otoz zadeklarowałem klase:

#ifndef EVENTS_H_INCLUDED
#define EVENTS_H_INCLUDED

#include<iostream>


class Event
{
    int day;
    std::string name;
    static bool status;
public:
    Event();
    Event(std::string n, int d, bool s = false);
    ~Event();
   ....
};

a w pliku cpp zdefiniowalem konstruktor:

#include <iostream>
#include<fstream>
#include "events.h"

using namespace std;

Event::Event()
{
    day = 0;
    name = "brak";
    status = false;
}

przy statusie wyskakuje błąd undefined reference to Event::status. Przy kolejnym konstruktorze i metodach to samo. Czy to powód statycznego przydziału pamieci ?

1 odpowiedź

0 głosów
odpowiedź 29 stycznia 2017 przez Ehlert Ekspert (212,630 p.)

Static jest  polem statycznym więc nadaj mu wartość poza konstruktorem. 

class MyType{/*cialo*/};

bool MyType::zmienna = true;
komentarz 29 stycznia 2017 przez czujek22 Dyskutant (7,670 p.)
Ok. A wiesz może dlaczego musiałem tą zmienną zadeklarować jako statyczną ? Ponieważ, gdy zrobiłem bool status wyskakiwał błąd, że zmienna jest non-static.
1
komentarz 29 stycznia 2017 przez efiku Szeryf (75,160 p.)
a MUSISZ mieć tą zmienną jako statyczną?
komentarz 29 stycznia 2017 przez criss Mędrzec (172,590 p.)

Ponieważ, gdy zrobiłem bool status wyskakiwał błąd, że zmienna jest non-static.

Wypadałoby wiedzieć odnosnie jakiej linii był ten błąd. 

komentarz 29 stycznia 2017 przez czujek22 Dyskutant (7,670 p.)
Właśnie nie chce jej jako statycznej a tylko ze słowem kluczowym static błąd sie nie pojawia. Błąd pojawia się przy linii bool status - deklaracja składowej w klasie.
komentarz 29 stycznia 2017 przez efiku Szeryf (75,160 p.)
To coś kręcisz.

http://cpp.sh/5f3qi
komentarz 29 stycznia 2017 przez czujek22 Dyskutant (7,670 p.)

Więc może dam cały kod, problem może jest gdzie indziej.

#ifndef EVENTS_H_INCLUDED
#define EVENTS_H_INCLUDED

#include<iostream>


class Event
{
    int day;
    std::string name;
    bool status;
public:
    Event();
    Event(std::string n, int d, bool s = false);
    ~Event();
    void change_status();
    void set_event();
    void reset();
    void show();

    friend std::ostream & operator<<( std::ostream & ofs, const Event & e );
};



#endif

#include <iostream>
#include<fstream>
#include "events.h"

using namespace std;

Event::Event()
{
    day = 0;
    name = "brak";
    status = false;
}

Event::Event(string n, int d, bool s )
{
    day=d;
    name=n;
    status=s;
}

Event::~Event()
{

}

void Event::set_event()
{
    string odp;
    cout<<"Podaj dzien, w ktorym masz material przerobic: ";
    cin>>day;
    cout<<"Podaj nazwe materialu do nauczenia: ";
    cin>>name;
    cout<<"Nauczyles sie juz tego?";
    cin>>odp;
    if(odp=="tak" || odp=="Tak" || odp=="TAK")
        status=true;
    else
        status=false;
}

void Event::change_status()
{
    status=true;
}

void Event::reset()
{
    day=0;
    name="brak";
    status=true;
}

void Event::show()
{
    cout<<"Material, ktory masz przerobic w dniu "<<day<<" to "<<name;
    if(status==false)
        cout<<"Jeszcze nie przerobione."<<endl;
    else
        cout<<"Juz to umiesz."<<endl;
}

ostream & operator<<(ostream & ofs, const Event & e )
{
    ofs<<"Dzien "<<e.day<<endl;
    ofs<<"Material "<<e.name;
    if(Event::status=false)
        ofs<<"Nie przerobiony material"<<endl;
    else if(Event::status==true)
        ofs<<"Przerobiony material"<<endl;
    else
        ofs<<"Niepoprawny typ!"<<endl;
}

 

Tutaj Sreenshot

1
komentarz 29 stycznia 2017 przez criss Mędrzec (172,590 p.)
Bląd dotyczy linii na którą wskazuje error "from this location" . 66 linia events.cpp. Nie możesz w taki sposób odwoływać sie do niestatycznych skladowych. W jaki sposob to mialoby wg ciebie dzialac?
komentarz 29 stycznia 2017 przez czujek22 Dyskutant (7,670 p.)
Eh no głupi błąd, a w zasadzie 2 :D Mam nauczkę, żeby czytać kolejne linie błędów

Podobne pytania

0 głosów
3 odpowiedzi 426 wizyt
pytanie zadane 25 października 2015 w PHP przez babiak Obywatel (1,810 p.)
0 głosów
1 odpowiedź 171 wizyt
pytanie zadane 7 sierpnia 2015 w PHP przez makoso Mądrala (7,380 p.)
0 głosów
2 odpowiedzi 352 wizyt

92,417 zapytań

141,222 odpowiedzi

318,985 komentarzy

61,831 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...