• 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]|

Object Storage Arubacloud
0 głosów
9,526 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 978 wizyt
+1 głos
2 odpowiedzi 683 wizyt
pytanie zadane 19 września 2020 w C i C++ przez piotrkowskyyy Początkujący (280 p.)
0 głosów
2 odpowiedzi 1,924 wizyt

92,594 zapytań

141,443 odpowiedzi

319,711 komentarzy

61,979 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...