• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Błąd: ISO C++ forbids comparison between pointer and integer [-fpermissive]|

42 Warsaw Coding Academy
0 głosów
9,945 wizyt
pytanie zadane 26 lipca 2016 w C i C++ przez MatrixBMW Początkujący (360 p.)
zamknięte 26 lipca 2016 przez MatrixBMW

Hej, napisałem mój pierwszy samodzielny program z użyciem klas i funkcji w osobnych plikach. Wyskakiwało mi kilka błędów, ale poradziłem sobie z nimi. Teraz mam następujący i nie wiem co mogę z nim zrobić: 

Błędy są w mainie przy if'ach. Według mnie coś jest nie tak z funkcją menu(), ale nie wiem co. 

14 line |  ISO C++ forbids comparison between pointer and integer [-fpermissive]|

18 line |  ISO C++ forbids comparison between pointer and integer [-fpermissive]|

Oto kod:

int main()

#include <iostream>
#include <fstream>
#include "user.h"
#include "funkcje.h"
#include <cstdlib>

using namespace std;

int main()
{
  while(true)
  {
   menu(); //wybor REJESTRACJA / LOGOWANIE
    if (menu==1)   //jezeli uzytkownik wybral logowanie
    {
     logowanie(); //proces logowania
    }
    else if (menu==2) //jezeli uzytkownik wybral rejestracje
    {
     rejestracja(); //proces rejestracji
    }
    else  //jezeli uzytkownik wybral cos innego niz 1,2
    {
     nieprawidlowa_wartosc(); //komunikat o nieprawidlowej wartosci i powrot do menu (14. line)
    }
  }
return 0;
}

funkcje.h

#include <iostream>
#include <fstream>

using namespace std;

int menu();
void rejestracja();
void logowanie();
void nieprawidlowa_wartosc();

funkcje.cpp

#include "funkcje.h"
#include "user.h"
#include <iostream>
#include <fstream>
#include <windows.h>

int menu()
{
    int wybor;
    cout << "Witaj na naszej stronie!" <<endl;
    cout << "1. Logowanie"<<endl;
    cout << "2. Rejestracja"<<endl;
    cout << "Wybor: ";
    cin >>  wybor;
    return wybor;
}

 

komentarz zamknięcia: Odkryłem już przyczynę błędu
komentarz 4 lipca 2019 przez michal.huras Nowicjusz (170 p.)
edycja 4 lipca 2019 przez michal.huras

Pisząc fragmenty kodu:

14: if (menu==1)
18: else if (menu==2)

próbujesz porównać adres funkcji(menu) z wartością liczbową.
To co Cię interesuje jest wartość zwracana przez funkcję.
Możesz to osiągnąć poprzez:

int result = menu();

oraz następne używanie zmiennej result do porównywania.

Polecam też zainteresowanie się konstrukcją switch. Przykładowe wywołanie:
 

while(true) 
{
   switch(menu()) 
   {
   case 1:
      logowanie();
      break;
   case 2:
       rejestracja;
       break;
   default:
       nieprawidlowa_wartosc();
       break;
   }
}

W tym przypadku nie jest konieczne zapisywanie wartość zwracanej przez funkcję main() do zmiennej, ponieważ jest ona od razu porównywana(oraz dlatego że jest porównywana tylko w jednym miejscu).

 

1 odpowiedź

+1 głos
odpowiedź 26 lipca 2016 przez Szykem2 Nałogowiec (29,510 p.)
Zapamiętaj nazwa funkcji jest jej adresem tak samo jak nazwa tablicy jest adresem jej pierwszego elementu. jeśli porównujesz menu == 1 to porównujesz wskaźnik na funkcję do inta i wyrzuca błąd bo nie można porównywać wskaźnika do "zwykłej" zmiennej(jak jest napisane w komunikacie standard zabrania). Utwórz jakąś zmienną i przypisz jej wynik działania funkcji menu i dopiero ją porównuj z tymi wartościami.

Podobne pytania

0 głosów
2 odpowiedzi 1,334 wizyt
+1 głos
2 odpowiedzi 1,063 wizyt
pytanie zadane 19 września 2020 w C i C++ przez piotrkowskyyy Początkujący (280 p.)
0 głosów
2 odpowiedzi 2,259 wizyt

93,383 zapytań

142,382 odpowiedzi

322,539 komentarzy

62,744 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...