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

Program nie daje się skompilować

Object Storage Arubacloud
0 głosów
292 wizyt
pytanie zadane 26 września 2018 w C i C++ przez Mick_SQ6IYV Obywatel (1,020 p.)

Witam!

Przy nauce C++ korzystam m.in. z książki Jesse Liberty, Siddhartha Rao, Bradley L. Jones "C++ dla każdego". W rozdziale 4 znalazłem tam taki program (z kosmetycznymi zmianami, ale to mało ważne):

#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
enum WeekDays {Sun, Mon, Tue, Wen, Thu, Fri, Say, DaysInWeek};
int ArrayWeek[DaysInWeek]={ 10, 20, 30, 40, 50, 60, 70};
cout << "Wartosc wtorku to: " << ArrayWeek[Tue] << endl << endl;
system("pause");
return 0;
}

 

1. Według autorów, program w miejsce ArrayWeek[Tue] wstawić wartość 30. Ale zastanawia mnie co innego - dlaczego wymiar tablicy jest bez podania wartości, jest elementem wyliczenia. Nigdzie nie widzę konkretnej deklaracji wartości DaysInWeek. Jak to działa?

2. Tylko przy tym programie kompilator ma problem ze skompilowaniem. Wyrzuca ogłoszenie o treści: "Error 216: Wersja %1 nie jest zgodna z wersją uruchomionego systemu Windows. Sprawdź w informacjach dotyczących systemu.... bla, bla, bla... a następnie kontaktuj się z wydawcą oprogramowania..." Poza tym jednym, inne moje programy kompilują się i uruchamiają się bez zarzutu... Ktoś ma jakiś pomysł na to...?

komentarz 26 września 2018 przez Szfierzak Gaduła (3,750 p.)
Typ wyliczeniowy jest numerowany. Choćbyś nazywał go właśnie tak jak w przykładzie to kompilator przypisuje sobie wartości kolejno od 0. Dlatego Sun ma wartość 0, Mon 1, ... DaysInWeek 7. Możesz to sprawdzić konwertując na int'a i wypisując Sun, Mun... za pomocą cout'a. Stąd konstrukcja ArrayWeek[Tue] jest równoważna ArrayWeek[2], a ten element zgodnie z deklaracją jest równy 30.

 

Odnośnie drugiego problemu, to nie pomogę, nie spotkałem się z takim.

2 odpowiedzi

0 głosów
odpowiedź 26 września 2018 przez draghan VIP (106,230 p.)
wybrane 26 września 2018 przez Mick_SQ6IYV
 
Najlepsza

dlaczego wymiar tablicy jest bez podania wartości, jest elementem wyliczenia. Nigdzie nie widzę konkretnej deklaracji wartości DaysInWeek. Jak to działa?

Wartości elementów typu wyliczeniowego są numerowane kolejno od zera, chyba że każesz kompilatorowi inaczej:

enum SomeEnum
{
    a,         // = 0
    b,         // = 1
    c = 6,     // = 6
    d,         // = 7
    e = 20,    // = 20
    f          // = 21
};

Co do błędu 206 - czytałem trochę o tym tutaj i piszą, że to jest zależne od bitowości systemu i programu. Sam Twój kod źródłowy wygląda w porządku, nie jest powodem takiego zachowania. Problem musi leżeć po stronie kompilatora. Używasz Visual Studio?

0 głosów
odpowiedź 26 września 2018 przez Mick_SQ6IYV Obywatel (1,020 p.)
Nie, używam Dev C++ w wersji 5.11. Sam byłem zdziwiony, że program nie chciał się skompilować, tym bardziej że chwilę wcześniej i chwilę później kompilator zadziałał jak ta lala.

 

Ciekawe jest to, co wspominacie obaj o enum, o tym przypisywaniu wartości z automatu. Dziękuję bardzo:)

Podobne pytania

0 głosów
2 odpowiedzi 787 wizyt
pytanie zadane 22 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
+1 głos
1 odpowiedź 491 wizyt
pytanie zadane 16 stycznia 2016 w C i C++ przez konrad99 Gaduła (4,090 p.)
0 głosów
0 odpowiedzi 398 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...