Skocz do zawartości
  • Ogłoszenia

  • Gdzie świętować urodziny GMCLANu   15 użytkowników zagłosowało

    1. 1. Gdzie świętować urodziny GMCLANu


      • Warszawa (bo w centrum)
      • Szczecin (bo tam mieszka Ranma i narodził się GMCLAN)

    Żeby zagłosować w tej ankiecie, prosimy się zalogować lub zarejestrować. Zobacz temat
Chell

funkcja undeclared

Rekomendowane odpowiedzi

Chell    26

elo, w ponizszym kodzie kompilator wyrzuca mi ze 'plus' undeclared (first use this fuction). co jest?

#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;

double plus(int x)
{
     double xx;
     bool znak;
     while (znak==false)
     {
           switch (x)
           {
                  case 1: cout << "Wprowadz dlugosc pierwszego boku: "; break;
                  case 2: cout << "Wprowadz dlugosc drugiego boku: "; break;
                  case 3: cout << "Wprowadz dlugosc trzeciego boku: "; break;
                  case 4: cout << "Wprowadz dlugosc pierwszej przekatnej: "; break;
                  case 5: cout << "Wprowadz dlugosc drugiej przekatnej: "; break;
                  case 6: cout << "Wprowadz wielkosc kata miedzy przekatnymi: "; break;
                  case 7: cout << "Wprowadz dlugosc boku: "; break;
                  case 8: cout << "Wprowadz dlugosc promienia: "; break;
           }
           cin >> xx;
           if (xx>0) znak==true;
           else cout << "Wprowadz dodatnia wartosc.";
           }
     znak=false;
     return xx;
}
void drugie()
{
     int katy,figura;
     double a,b,c;
     cout << "Ile katow ma interesujaca Cie figura? (3+): ";
     cin >> katy;
     switch (katy)
     {
         case 3:
         {
             a=plus(1);
             b=plus(2);
             c=plus(3);
             d=(a+b+c)/2;
             cout << "Pole trojkatu o bokach dlugosci " << a << ", " << b << " i " << c << " wynosi " << sqrt(d*(d-a)*(d-b)*(d-c));
         }
         break;
         case 4:
         {
             a=plus(4);
             b=plus(5);
             c=plus(6);
             cout << "Pole czworokatu o przekatnych " << a << " i " << b << " oraz kacia miedzy przekatnymi " << c << " wynosi " << a*b/2*(c*180/M_PI);
         }
         break;
         default:
         {
             a=plus(7);
             b=plus(8);
             cout << "Pole " << katy << "-katnej figury o dlugosci boku " << a << " i promieniu " << b << " wynosi " << katy/2*a*b;
         }
     }    
}
int main()
{
     //pierwsze();
     //getch();
     //cout << endl;
     drugie();
     getch();
}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
ediepl    2

Zamień

if (xx>0) znak==true;

na

if (xx>0) znak=true;

 

i w

void drugie()
{
     int katy,figura;
     double a,b,c; // <<<< tutaj
     cout << "Ile katow ma interesujaca Cie figura? (3+): ";
     cin >> katy;

zapomniałeś zadeklarować zmiennej 'd'

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
tramur    6
fakt, poprawione, ale wciąż plus undeclared

 

Słowo "plus" jest zarezerwowane dla funkcji biblioteki STL (std::plus).

Czyli masz dwie opcje:

  • zmienić nazwę funkcji plus na jakąś inną,
  • wyrzucić globalne using namespace std i wypisywać liczbę przez std::cout zamiast samego cout,
  • wyrzucić globalne using namespace std i wstawić using std::cout, using std::cin i using std::endl.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Danielus    0

Trochę stary temat, ale myślę że się przyda czytającym w przyszłości:

 

double plus(int x)
{
     double xx;
     bool znak;
     while (znak==false)
     {

 

deklarujesz zmienne bez inicjalizacji. To znaczy że w tym momencie są tam śmieci.

Następnie masz pętle while sprawdzającą czy znak==false.

Skoro jednak tam jest śmieć to może się zdarzyć że zmienna od razu będzie ustawiona na true i while się nigdy nie wykona.

Jeśli tak się stanie to przejdzie od razu do return xx;

Ale w xx tez jest śmieć więc zwrócisz śmieciowa wartość, która może być ujemna chociaż w pętli masz warunki mające wykluczyć taką możliwość.

 

W ten sposób otrzymujesz bugi które ciężko znaleźć bo raz się reprodukują a raz nie. W nieprzyjemnych przypadkach u ciebie zawsze będzie działać a przestanie np dopiero po przeniesieniu na inny komputer.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×