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

[C++] Kompilator MinGW-4.8.1 a standard C++

Ostatnio zmodyfikowano 2014-10-18 23:33
Autor Wiadomość
marian.zacharski
Temat założony przez niniejszego użytkownika
[C++] Kompilator MinGW-4.8.1 a standard C++
» 2014-10-18 15:53:25
Szanowni, ostatnio zacząłem się uczyć C++ z przyjemnej książki Symfonia C++ Jerzego Grębosza. Wykonanie ćwiczenia poniżej ze wskaźnikami przekazywanymi do funkcji powoduje wyrzut kilku ekranów błędów kompilatora.

C/C++
#include <iostream>
using namespace std;

void wypisz( int * y, int rozmiar );

main() {
    int tab[ 4 ] = { 0, 1, 2, 3 };
    cout << "Zawartosc TABLICY : " << wypisz( tab, 4 ) << endl;
}

void wypisz( int * y, int rozmiar ) {
    for( int i = 0; i < rozmiar; i++ ) {
        cout << *( y++ ) << ",";
    }
}
Niestety nie wiem czy wystąpił problem z kompilatorem czy też prezentowany w książce przykład jest błędny, chociaż ksiazka jest wg  mnie porzadnie napisana i wiem, że była przez ludzi chwalona.
Używam kompilatora MinGW-4.8.1 pod Win7.

Inny przykład z którym nie radzi sobie moj kompilator to:
C/C++
int tabint[ 3 ] = { 0, 1, 2 };
float tabflo[ 3 ] = { 0.1, 0.2, 0.3 };
int * wi;
float * wf;

for( int i = 0, wi = tabint, wf = tabflo; i < 3; i++ ) //<--- taki zapis nie jest akceptowany przez kompilator

     wi = tabint; //<--- taki zapis jest akceptowany

wf = tabflo;
for( int i = 0; i < 3; i++ )

Co oznacza takie zachowanie kompilatora? Czy to problem z moim srodowiskiem do kompilowania c++, czy coś się pozmieniało w standardzie jezyka c++ że książka z 1999 roku nadaje sie na śmietnik?
P-118780
Monika90
» 2014-10-18 15:58:46
Należy podać typ zwracany z funkcji main, tzn. zamiast
C/C++
main() {
}
powinno być
C/C++
int main() {
}

C/C++
for( int i = 0, wi = tabint, wf = tabflo; i < 3; i++ ) //<--- taki zapis nie jest akceptowany przez kompilator

bo ten zapis nie ma sensu w ogóle, jest to błąd typu. wf i wi są typu int a próbujesz zainicjalizować je za pomocą wskaźników.

Pierwszy standard C++ został ratyfikowany w 1998, to były błędy już wtedy.

EDIT: I jeszcze to
C/C++
cout << "Zawartosc TABLICY : " << wypisz( tab, 4 ) << endl;
Funkcja wypisz zwraca void, nie da się wyniku tej funkcji wysłać do strumienia. Mozna to zapisać w osobnych instrukcjach
C/C++
cout << "Zawartosc TABLICY : ";
wypisz( tab, 4 );
cout << endl;
P-118782
marian.zacharski
Temat założony przez niniejszego użytkownika
» 2014-10-18 23:33:24
Problem był trywialny :/ Jak sie okazało, było cout w cout, czyli zamiast
C/C++
cout << wypisz( tab, 4 );
w której to funkcji 'wypisz' już było cout, powinno być po prostu
C/C++
wypisz( tab, 4 );

P-118828
« 1 »
  Strona 1 z 1