Kłopot z deklaracją zmiennej string w Visual 2010

0

Na początku zaznaczam iż jestem kompletnym newbie i dopiero co zaczynam programowac z c++ jak i w ogole:)

mam zainstalowane środowisko visual studio 2010 i robię, znany pewnie większości z Was, tutorial- "Od zera do gier kodera"
fakt, tutorial jest stary w porównaniu do roku wydania mojej wersji basica stad może wynikać niniejszy błąd w każdym razie kolimator nie chce kompilować poniższego kodu:

#include <iostream>
#include <conio.h>


void Funkcja()
{
   static int nLicznik = 0;
 
   ++nLicznik;
   std::cout << "Funkcje wywołano po raz " << nLicznik << std::endl;
}
 
void main()
{
   std::string strWybor;
   do
   {
         Funkcja();
 
         std::cout << "Wpisz 'q', aby zakończyć: ";
         std::cin >> strWybor;
   } while (strWybor != "q");
} 

mianowicie pokazuje blad pt "no operator ">> (!=)" matches these operands" pod strzałkami przy strumieniu wejścia

 std::cin >> strWybor; 

oraz pod znakiem nierownosci warunku while while (strWybor != "q");

3

Brakuje dołączenia nagłówka: #include <string>
Poza tym main powinien zwracać int.

0

Dziękuję Satirev- faktycznie brakowało #include <string>, co do reszty program dziala poprawnie i pokazuje ile razy wywołano funkcje, także main jest chyba poprawnie skonstruowany..chyba:)

1

Nie jest poprawnie skonstruowany. Przeczytaj o tym np. tutaj: http://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c

1

Nie. Funkcja main musi zwracać typ int.

§ 3.6.1/2

An implementation shall not predefine the main function. This function shall not be overloaded. It shall
have a return type of type int, but otherwise its type is implementation-defined.

1

Czyli z tego co zrozumialem funkcja main() powinna wyglądac tak:

int main()
{
  ......;
  (...);
  return 0;
} 

?

I czy móglbym ktoregos z Was poprosic o dokladne wyjasnienie, jaka jest roznica, tzn co daje taka konstrukcja?

2
Hannibal777 napisał(a):

czy móglbym ktoregos z Was poprosic o dokladne wyjasnienie, jaka jest roznica, tzn co daje taka konstrukcja?

główna funkcja programu na końcu swojego działania zwraca rezultat wykonania programu do systemu - informuje system czy program zakończył się:

  • poprawnie - zazwyczaj zwracając wartość 0 (jeśli kompilujesz na jakieś dziwne systemy to bezpieczniej zwrócić EXIT_SUCCESS bo może zdarzyć się tak, że jakiś system przewiduje inne wartości dla sygnalizowania poprawności wykonania aplikacji)
  • błędnie - zazwyczaj zwracana jest wartość różna od zera - analogicznie do EXIT_SUCCESS istnieje makro EXIT_FAILURE.

Oba makra znajdują się w nagłówku <cstdlib>.

Niektóre kompilatory przepuszczają wersję "void main()" pewnie ze względu na wsteczną kompatybilność z wersją języka sprzed wprowadzenia standardu. Jak jednak słusznie zacytował standard @kq wersja ta nie jest poprawna i nie powinno się jej stosować.

0

No, teraz to juz wszystko jasne i kalrowne:) dzięki Panowie!

1 użytkowników online, w tym zalogowanych: 0, gości: 1