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

Program nie daje się skompilować

0 głosów
120 wizyt
pytanie zadane 26 września 2018 w C i C++ przez Mick_SQ6IYV Użytkownik (960 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,020 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 Użytkownik (960 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 344 wizyt
pytanie zadane 22 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
+1 głos
1 odpowiedź 432 wizyt
pytanie zadane 16 stycznia 2016 w C i C++ przez konrad99 Gaduła (4,100 p.)
0 głosów
0 odpowiedzi 128 wizyt
pytanie zadane 5 listopada 2021 w C i C++ przez HUBSON2912 Użytkownik (700 p.)

89,083 zapytań

137,670 odpowiedzi

307,621 komentarzy

59,141 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...