Skocz do zawartości
  • Ogłoszenia

    • Uzjel

      Nowa wersja forum   05.08.2017

      Pewnie widać, że wprowadziliśmy nową wersję forum. Skok z wersji 2 do 4 był dosyć trudny i musimy tu trochę posprzątać. Dajcie nam trochę czasu ~Administracja
    • Uzjel

      GMClan wrócił!   12.08.2017

      GMClan.org już działa, więc jeżeli ktoś wchodził przez adres forum.gmclan.org to może już wrócić do starych zwyczajów. Jeżeli strona wam się nie wyświetla to wyczyście cache i ciasteczka.
Chell

funkcja undeclared

Rekomendowane odpowiedzi

Chell    24

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ę.

×