malwareX Temat założony przez niniejszego użytkownika |
"error: b was not declared in this scope" » 2013-11-24 13:12:59 Witam wszystkich mam do wykonania zadanie o następującej treści "Utworzyć 3 funkcje (podprogramy) o nazwach Setup, Run i Cleanup /* i przenieść do nich część odpowiedzialną za inicjalizację, obliczenia /* oraz zakończenie (pauza) programu." Oto mój kod #include <iostream> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <time.h>
void Setup()
{ int i; double a, b, c, rand_max; setlocale( LC_ALL, "" ); srand( time( NULL ) ); rand_max = RAND_MAX; }
void Run()
{ Setup(); for( i = 0; i < 100; i++ ) { do { a = rand() / rand_max * 30.0 + 10.0; b = rand() / rand_max * 30.0 + 10.0; c = rand() / rand_max * 30.0 + 10.0; } while ( a + b < c ); ( b + c < a ); ( a + c < b ); printf( "%g %g %g\n", a, b, c ); } }
void Cleanup() { system( "pause" ); }
int main( void ) { Setup(); Run(); Cleanup(); return 0; } A to błędy: D:\344\main.cpp||In function 'void Setup()':| D:\344\main.cpp|12|warning: unused variable 'i' [-Wunused-variable]| D:\344\main.cpp|13|warning: unused variable 'a' [-Wunused-variable]| D:\344\main.cpp|13|warning: unused variable 'b' [-Wunused-variable]| D:\344\main.cpp|13|warning: unused variable 'c' [-Wunused-variable]| D:\344\main.cpp|13|warning: variable 'rand_max' set but not used [-Wunused-but-set-variable]| D:\344\main.cpp||In function 'void Run()':| D:\344\main.cpp|23|error: 'i' was not declared in this scope| D:\344\main.cpp|27|error: 'a' was not declared in this scope| D:\344\main.cpp|27|error: 'rand_max' was not declared in this scope| D:\344\main.cpp|28|error: 'b' was not declared in this scope| D:\344\main.cpp|29|error: 'c' was not declared in this scope| D:\344\main.cpp|32|error: 'a' was not declared in this scope| D:\344\main.cpp|32|error: 'b' was not declared in this scope| D:\344\main.cpp|32|error: 'c' was not declared in this scope| ||=== Build finished: 8 errors, 5 warnings (0 minutes, 0 seconds) ===|
Z tego co rozumiem po logach muszę zadeklarować jeszcze raz wszystkie zmienne z 1 funkcji ,więc w jaki sposób to zrobić skoro jej wywołanie( Setup(); ) nie daje żadnego skutku ? Bo inicjalizacja to (tak mi się wydaje ) deklarowanie zmiennych czy się mylę ? |
|
Pokropow |
Zmienne lokalne » 2013-11-24 13:36:33 zmienne a, b i c są stworzone w funkcji setup() i tylko tam są widoczne. Jak chcesz z nich korzystać poza funkcją to stwórz je jako globalne lub przekaż je jako argumenty do innych funkcji.
|
|
Buby |
» 2013-11-24 13:43:13 Polecam użycie referencji. Spójrz: #include <iostream> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <time.h>
void Setup( int & rand_max ) { setlocale( LC_ALL, "" ); rand_max = RAND_MAX; }
void Run( double & a, double & b, double & c, double & rand_max ) { Setup(); for( i = 0; i < 100; i++ ) { do { a = rand() / rand_max * 30.0 + 10.0; b = rand() / rand_max * 30.0 + 10.0; c = rand() / rand_max * 30.0 + 10.0; } while ( a + b < c ); ( b + c < a ); ( a + c < b ); printf( "%g %g %g\n", a, b, c ); } }
void Cleanup() { system( "pause" ); }
int main( void ) { srand( time( NULL ) ); int i = 0; doube a, b, c, rand_max; Setup( rand_max ); Run( a, b, c, rand_max ); Cleanup(); return 0; } Polecam poczytać Ci o referencjach - kurs c++ na tej stronie. |
|
Pokropow |
» 2013-11-24 13:50:24 Jeżeli nie wiesz co to referencje to można też stworzyć zmienne globalne #include <iostream> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <time.h>
double a, b, c, rand_max; void Setup()
{ setlocale( LC_ALL, "" ); srand( time( NULL ) ); rand_max = RAND_MAX; }
void Run()
{ Setup(); for( int i = 0; i < 100; i++ ) { do { a = rand() / rand_max * 30.0 + 10.0; b = rand() / rand_max * 30.0 + 10.0; c = rand() / rand_max * 30.0 + 10.0; } while ( a + b < c ); ( b + c < a ); ( a + c < b ); printf( "%g %g %g\n", a, b, c ); } }
void Cleanup() { system( "pause" ); }
int main( void ) { Setup(); Run(); Cleanup(); return 0; }
|
|
Buby |
» 2013-11-24 13:54:58 @Pokropow, używanie zmiennych globalnych jest złem wcielonym. Przykładowo, jeśli używasz ich w funkcji, z tego co zrozumiałem następuje kopiowanie zmiennej do adresu i operowanie na kopii. Co sprawia, że zajmujemy niepotrzebnie dodatkową pamięć. Poza tym jeśli zmienimy zmienną globalną w funkcji a, to w funkcji b jej wartość będzie taka jak przy deklaracji. Możemy to ominąć za pomocą referencji lub wskaźnika. |
|
kubek3898 |
» 2013-11-24 13:59:49 Używanie system() też jest nie zalecane i odradzane, a jednak w tym programie występuje. Jeśli pytającemu lepiej używać zmiennych globalnych to niech ich używa :). Po kodzie widać, że jest dość początkujący, także temat referencji może być dla niego ciut niezrozumiały. |
|
Pokropow |
» 2013-11-24 14:13:10 Oczywiście że korzystanie ze zmiennych globalnych jest złem wcielonym (chociaż nie dlatego,że marnują pamięć,ale dlatego że nie powinno być dwóch zmiennych o tej samej nazwie) ale w małych projektach , w których mamy tylko kilka zmiennych można nich spokojnie korzystać(byle miały unikalne nazwy). |
|
kynol |
» 2013-11-24 14:34:38 Dokladnie , zmienne globalne mozna uzywac ale sa odradzane, w tym przypadku tak jak Buby napisal uzywaj referencji, jesli nie wiesz co to, to poczytaj na google, w skrocie Ci powiem ze dzialaja one na oryginalnych obiektach |
|
« 1 » 2 |