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

Nie można zainicjować zmiennej typu bool

Object Storage Arubacloud
0 głosów
321 wizyt
pytanie zadane 24 maja 2016 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)
edycja 24 maja 2016 przez Shiro

Podczas próby utworzenia zmiennej i przypisania jej wartości startowej false wyskakują następujące błędy:

1. error C3845: 'Calculator::board::status': only static data members can be initialized inside a ref class or value type
2. IntelliSense: data member initializer is not allowed

[. . .]
#pragma endregion

		bool status = false;

[. . . ]

Jest to forma (.h) w środowisku VS2012 Jeżeli popełniam jakiś głupi błąd to napisz jaki, od nie dawna koduje w VS2012 :) 

1 odpowiedź

+1 głos
odpowiedź 24 maja 2016 przez Radfler VIP (101,030 p.)
edycja 24 maja 2016 przez Radfler

Inicjalizacja niestatycznych składowych przy ich definicji w klasie nie jest wspierana w VS12.

struct Foo {
    int bar = 0; // C3845 przed VS13
};
komentarz 24 maja 2016 przez Shiro Stary wyjadacz (10,300 p.)
Aha czyli wystarczy że dam niżej przypisanie?

Niestandardowych? jakie to lub jakie nie są niestandardowe ? Dzięki!
komentarz 24 maja 2016 przez Radfler VIP (101,030 p.)
Gdzie ja napisałem "niestandardowych"? :v

A inicjalizacja powinna odbyć się w konstruktorze.
komentarz 24 maja 2016 przez Shiro Stary wyjadacz (10,300 p.)
Dobra, dobra :D w konstruktorze, czyli również i sama deklaracja powinna mieć tam miejsce? Czy inicjacja boola w konstruktorze jest akceptowalna przez vs2012 ?
komentarz 24 maja 2016 przez Radfler VIP (101,030 p.)

No tak, jak chcesz zainicjalizować bool'a (lub dowolny inny typ) w konstruktorze, to zrób to tak:

struct Foo {
  
  // konstruktor domyślny inicjalizuje zmienną 'bar' wartością fałsz
  Foo() : bar(false) { }

  int bar; // definicja niestatycznej składowej

};

 

komentarz 24 maja 2016 przez Shiro Stary wyjadacz (10,300 p.)
Trochę się pogubiłem

Zmienną bar ??
skoro konstruktor to metoda o nazwie takiej jak klasa to nie powinno to być wewnątrz klamer po bar(false) ?
dlaczego tam jest : po foo() co on robi ?
komentarz 24 maja 2016 przez Radfler VIP (101,030 p.)

Budowa konstruktora:

nazwa_klasy(parametry) : lista_inicjalizacyjna { ciało_konstruktora }

http://en.cppreference.com/w/cpp/language/initializer_list

To jest po prostu bezpośrednia inicjalizacja zmiennej po utworzeniu obiektu.

komentarz 24 maja 2016 przez Shiro Stary wyjadacz (10,300 p.)
No dobra;

jak to zmieniłem na

bool status; status = false; to znowu się kszaczy. (dodane po za konstruktorem na razie)

1. error C4430: missing type specifier - int assumed. Note: C++ does not support default-int    
2. error C3845: 'Calculator::board::status': only static data members can be initialized inside a ref class or value type    
3. IntelliSense: this declaration has no storage class or type specifier    
4. IntelliSense: data member initializer is not allowed
komentarz 24 maja 2016 przez Radfler VIP (101,030 p.)

Robisz to tak?

struct XYZ {

  bool status;
  status = false;

};

Jeżeli chcesz pracować na zmiennych to musisz to zrobić w funkcji. Kod nie może tak sobie "wisieć".

komentarz 24 maja 2016 przez Shiro Stary wyjadacz (10,300 p.)
Wydaje mi się że umieściłem rejerwacje w metodzie (konstruktorze) niestety VS2012 nadal wyrzuca błąd.

SS: https://goo.gl/Ax0UDN
komentarz 24 maja 2016 przez Shiro Stary wyjadacz (10,300 p.)
Tak btw. to robię to do projektu z kursu od strefakursów i tam facet właśnie tak robił, co prawda w VS2013 ale myślę że to nie ma większego znaczenia ;)
komentarz 24 maja 2016 przez Radfler VIP (101,030 p.)

A przypadkiem  te zmienne component1, component2, itd. nie powinny znaleźć się w definicji klasy?

komentarz 24 maja 2016 przez Shiro Stary wyjadacz (10,300 p.)

Zadajesz za trudne pytania :D 

component1 używam w 4 onclicach przycisków
component2 używam w 1 onclicku przycisku

Ale czy to czyni wymaganym bycie argumentem klasy to nie wiem. Kiedy jest ok aby zmienna byla argumentem klasy ?

komentarz 24 maja 2016 przez Radfler VIP (101,030 p.)
Kiedy jest ok, aby zmienna była argumentem klasy?.... Kiedy dużo jej używasz i jest ona bezpośrednio związana z klasą.
komentarz 24 maja 2016 przez Shiro Stary wyjadacz (10,300 p.)
W takim razie nie, nie powinny być to argumenty klasy ;)
komentarz 24 maja 2016 przez Shiro Stary wyjadacz (10,300 p.)

Zrobiłem tak jak było wcześniej:

[. . .]

	public:
		board(void)//konstruktor
		{
			InitializeComponent();

			double component1, component2, result;
			char operation;
			bool status;
			status = false;
			
			//
			//TODO: Add the constructor code here
			//
		}

[. . .]

Zmienne są w PUBLICZNEJ funkcji. Dlaczego niżej przy próbie ich użycia kompilator chcę referencje przecież są one dostępne publicznie, czy nie ?

komentarz 24 maja 2016 przez Shiro Stary wyjadacz (10,300 p.)
Dobra udało mi się zmienić trochę logikę programu i działa jednak byłbym wdzięczny za informacje gdzie i jak przypisać wartość dla zmiennej typu bool. Wszelkie moje próby zrobienia tego w konstruktorze zakończyły się fiaskiem ;(

Tak czy inaczej i tak Ci dziękuje @Radfler ;)

Podobne pytania

0 głosów
1 odpowiedź 121 wizyt
pytanie zadane 5 maja 2016 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)
0 głosów
0 odpowiedzi 106 wizyt
pytanie zadane 22 maja 2020 w C i C++ przez Air2000 Początkujący (280 p.)
0 głosów
1 odpowiedź 509 wizyt

92,634 zapytań

141,505 odpowiedzi

319,883 komentarzy

62,015 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...