Wskażniki
Ostatnio zmodyfikowano 2014-07-25 21:17
Mateus. Temat założony przez niniejszego użytkownika |
Wskażniki » 2014-07-25 19:47:57 Natknąłem się na problem ze wskaźnikami. Kod programu: #include <iostream> using namespace std;
bool f1( double, int ); bool f2( double, int ); bool f3( double, int ); bool f4( double, int ); bool f5( double, int ); bool f6( double, int );
int main() { cout << "Menu Robota:\n1 - f1\n2 - f2\n3 - f3\n4 - f4\n5 - f5\n6 - f6\n7 - Wykonaj\n8 - Koniec\n\n"; int a; int i = 0; double tab[ 20 ]; bool( *( wsk[ 20 ] ) )( double, int ); for(; i < 20; i++ ) { cin >> a; switch( a ) { case 1: wsk[ i ] = & f1; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 2: wsk[ i ] = & f2; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 3: wsk[ i ] = & f3; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 4: wsk[ i ] = & f4; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 5: wsk[ i ] = & f5; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 6: wsk[ i ] = & f6; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 7: goto berlin; break; case 8: goto koniec; break; default: cout << "Bledna instrukcja\n"; break; } } berlin: for( int c = 0; c < i; c++ ) { ( *( wsk[ c ] ) )( tab, c ); } koniec: cout << endl << "Koniec programu"; return 0; } bool f1( double f[], int g ) { cout << "funkcja f1 " << "Obrot o " << f[ g ] << "Stopni" << endl; return true; } bool f2( double f[], int g ) { cout << "funkcja f2 " << "Obrot o " << f[ g ] << "Stopni" << endl; return true; } bool f3( double f[], int g ) { cout << "funkcja f3 " << "Obrot o " << f[ g ] << "Stopni" << endl; return true; } bool f4( double f[], int g ) { cout << "funkcja f4 " << "Obrot o " << f[ g ] << "Stopni" << endl; return true; } bool f5( double f[], int g ) { cout << "funkcja f5 " << "Obrot o " << f[ g ] << "Stopni" << endl; return true; } bool f6( double f[], int g ) { cout << "funkcja f6 " << "Obrot o " << f[ g ] << "Stopni" << endl; return true; }
Program działał, gdy nie było przekazywanych argumentów do funkcji, ale w kolejnym zadaniu było trzeba go tak zmodyfikować. Log komilacji: |67| error: cannot convert 'double*' to 'double' in argument passing| ||=== Build finished: 1 errors, 0 warnings ===|
Nie wiem co robię źle w tej 67 linijce :( |
|
pekfos |
» 2014-07-25 20:24:56 Deklaracje funkcji z początku programu są niezgodne z definicjami. |
|
Mateus. Temat założony przez niniejszego użytkownika |
» 2014-07-25 20:27:20 "Poprawiłem" trochę i teraz się kompiluje, ale nie wiem dlaczego tamto było źle i dlaczego teraz po wywołaniu "7 - wykonaj" po pierwszej linijce wywala błąd. KOD: #include <iostream> using namespace std;
bool f1( double ); bool f2( double ); bool f3( double ); bool f4( double ); bool f5( double ); bool f6( double );
int main() { cout << "Menu Robota:\n1 - f1\n2 - f2\n3 - f3\n4 - f4\n5 - f5\n6 - f6\n7 - Wykonaj\n8 - Koniec\n\n"; int a; int i = 0; double tab[ 20 ]; double * wsk2 = tab; bool( *( wsk[ 20 ] ) )( double ); for(; i < 20; i++ ) { cin >> a; switch( a ) { case 1: wsk[ i ] = & f1; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 2: wsk[ i ] = & f2; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 3: wsk[ i ] = & f3; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 4: wsk[ i ] = & f4; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 5: wsk[ i ] = & f5; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 6: wsk[ i ] = & f6; cout << "\nO ile stopni kapitanie: "; cin >> tab[ i ]; break; case 7: goto berlin; break; case 8: goto koniec; break; default: cout << "Bledna instrukcja\n"; break; } } berlin: for( int c = 0; c < i; c++ ) { ( *( wsk[ c ] ) )( *( wsk2++ ) ); } koniec: cout << endl << "Koniec programu"; return 0; } bool f1( double f ) { cout << "funkcja f1 " << "Obrot o " << f << "Stopni" << endl; return true; } bool f2( double f ) { cout << "funkcja f2 " << "Obrot o " << f << "Stopni" << endl; return true; } bool f3( double f ) { cout << "funkcja f3 " << "Obrot o " << f << "Stopni" << endl; return true; } bool f4( double f ) { cout << "funkcja f4 " << "Obrot o " << f << "Stopni" << endl; return true; } bool f5( double f ) { cout << "funkcja f5 " << "Obrot o " << f << "Stopni" << endl; return true; } bool f6( double f ) { cout << "funkcja f6 " << "Obrot o " << f << "Stopni" << endl; return true; }
|
|
pekfos |
» 2014-07-25 20:30:44 ale nie wiem dlaczego tamto było źle |
Argumenty się nie zgadzały. i dlaczego teraz po wywołaniu "7 - wykonaj" po pierwszej linijce wywala błąd. |
Jaki..? |
|
Mateus. Temat założony przez niniejszego użytkownika |
» 2014-07-25 20:45:50 Nie rozumiem co się stało??? Gdy pisałem poprzedni post wyskakiwała mi pomoc systemu windows i program się zawieszał, a teraz ponownie go skopilowałem i działa. Magia? W międzyczasie pomyślałem, że może być to wina pętli, która się nie kończy przy wyjściu z niej przy pomocy goto . i dołożyłem ifa z przerwaniem pętli przy wartości 7 lub 8, ale teraz i bez tego nie działa. Instrukcja goto jest taka niebezpieczna? Polecasz jej unikać, czy tez nie? |
|
pekfos |
» 2014-07-25 21:04:18 Każdy powie, że goto to zła praktyka i trzeba jej unikać. A czy niebezpieczna..? |
|
Moorfox |
» 2014-07-25 21:17:53 Jeśli pracujesz na DOS'ie to tak ;/ |
|
« 1 » |