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

Problem z kompilowaniem kodu

Object Storage Arubacloud
0 głosów
431 wizyt
pytanie zadane 20 października 2015 w C i C++ przez lazym8 Nowicjusz (120 p.)
#include "stdafx.h"

using namespace std;

string pin;


int main()
{
	cout << "Witaj w naszym banku!" << endl;
	cout << "Podaj pin:";
	cin >> pin;

	if (pin == "1729")
	{
		cout << "Prawidlowy PIN!";
	}
	else
	{
		cout << "Nieprawidlowy PIN!";
	}
    return 0;
}

 

Oto kod źródłowy, który napisałem na podstawie poradnika pana Mirosława. I nie jest to jedyny kod z którym mam następujący problem. Przy kompilacji występuje błąd:

Severity    Code    Description    Project    File    Line
Error    C2679    binary '>>': no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion) 

Oraz

Severity    Code    Description    Project    File    Line
Error (active)        no operator ">>" matches these operands

 

 

 

2 odpowiedzi

+2 głosów
odpowiedź 20 października 2015 przez Krawiec91 Pasjonat (19,600 p.)
Próbujesz porównać string z int-em w 14 linii, dlatego występuje błąd przy kompilacji. Wzięcie 1729 w cudzysłowy "" rozwiąże problem.
komentarz 20 października 2015 przez lazym8 Nowicjusz (120 p.)
Zauważyłem to dosłownie sekundę przed tym jak napisałeś. Poprawiłem kod źródłowy zarówno tutaj jak i w moim środowisku, jednakże problem dalej występuje i wskazuje mi na linie 12, z niezrozumiałych dla mnie powodów.
komentarz 20 października 2015 przez Krawiec91 Pasjonat (19,600 p.)

Kod wygląda w porządku. Dopisz na początku:
 

#include <iostream>

 

komentarz 20 października 2015 przez lazym8 Nowicjusz (120 p.)
Na początku właśnie był dopisany na start. Potem przerzuciłem go do pliku, który miałem wraz z precompiled headerem w Visual Studio (grzebałem nad rozwiązaniem problemu, plik na start załączony - stdafx.h). Wciąż wygląda to niestety tak samo.
komentarz 20 października 2015 przez Krawiec91 Pasjonat (19,600 p.)
Piszesz w CodeBlocks w Visual Studio?
komentarz 20 października 2015 przez lazym8 Nowicjusz (120 p.)
Po zdziwieniu zakładam, że wyjdę na kompletnego debila ale założyłem, że środowisko nie ma znaczenia a na laptopie ze szkoły mam właśnie Visual Studio. Czyżbym się mylił? Jeżeli tak to wytłumaczysz mi na czym polega różnica?
komentarz 20 października 2015 przez Krawiec91 Pasjonat (19,600 p.)
Pytałem o środowisko, bo nie chcę udawać znawcy, czegoś co nie widziałem na oczy, w tym przypadku Visual Studio. W CodeBlocks po podmiance stdafx.h na iostream, program się kompiluje bez błędów.
komentarz 20 października 2015 przez lazym8 Nowicjusz (120 p.)
edycja 20 października 2015 przez lazym8
Owszem, korzystam z Visual Studio. Najzwyczajniej w świecie miałem je już zainstalowane na laptopie z którego korzystam w szkole więc pozwoliłem sobie na jego wykorzystanie zamiast zaopatrzać się w dodatkowe oprogramowanie.
komentarz 20 października 2015 przez Krawiec91 Pasjonat (19,600 p.)
Nie to, żebym miał jakiś uraz psychiczny do Visual Studio. Po prostu nie zdarzyło mi się w nim programować i tyle. Co do programu, to jedna myśli mi przychodzi do głowy, dopisz
#include <string>.
Błąd pojawia się przy operatorze wstawiania >> dla typu string, więc może pliku nagłówkowego <string> brakuje.
komentarz 20 października 2015 przez lazym8 Nowicjusz (120 p.)
Wszystko poszło jak po maśle. Faktycznie brakowało tego pliku nagłówkowego. Code Blocks go nie wymagał więc nie sądziłem, że tutaj będę musiał coś takiego dopisywać. Dziękuję za pomoc raz jeszcze. Czy wiesz może z jakiego powodu pojawiła się ta różnica między tymi środowiskami? Chciałbym wiedzieć na przyszłość.
komentarz 20 października 2015 przez Krawiec91 Pasjonat (19,600 p.)
Na podstawie moich doświadczeń, mogę powiedzieć, że o ile samo czyste kodzenie (składnia C++, instrukcje, etc) w różnych środowiskach (głównie korzystam z CodeBlocks i Borland C++ Builder) niczym się nie różni.  O tyle jest różnica właśnie z tymi plikami nagłówkowymi, CodeBlocks "nie widzi" pliku nagłówkowego iostream.h, a "widzi" iostream, z Borlandem jest odwrotnie. Różnica po części wynika ze stosowanego w danym środowisku standardu języka C++, bo z tym różnie jest. A po cześci z samego środowiska, warto poszperać w ustawieniach samego środowiska programistycznego. Poczytaj sobie o standardach jeżyka C++ (C++03, C++11, etc), sporo to też wyjaśnia.
+2 głosów
odpowiedź 20 października 2015 przez draghan VIP (106,230 p.)

Sekcja dołączanych nagłówków powinna wyglądać tak:

#include <iostream>
#include <string>

Jeśli nie używasz pre-compiled headers (technika stosowana w dużych projektach do skrócenia czasu kompilacji) - a w tym przypadku nie używasz, nie włączaj stdafx.h - jest on po prostu niepotrzebny.

W programie używasz strumieni wejścia-wyjścia, więc potrzebujesz iostream. Ponadto przechowujesz wczytane znaki w zmiennej std::string, więc musi pojawić się nagłówek string.

Niektóre IDE mają ustawione zabawne opcje dołączania odpowiednich bibliotek za plecami programisty, np. tak się działo w Dev-Cpp wersji <5 - uważam że to nie jest dobre rozwiązanie i powinno się takie wynalazki wyłączać. Lepiej mieć czystą sytuację, samemu dołączając wszystkie niezbędne nagłówki i biblioteki, a niepotrzebnych nie używać.

Podobne pytania

0 głosów
1 odpowiedź 400 wizyt
pytanie zadane 19 lutego 2020 w Mikrokontrolery przez Mavimix Dyskutant (8,390 p.)
0 głosów
1 odpowiedź 133 wizyt
pytanie zadane 13 lutego 2017 w JavaScript przez zgrybus Pasjonat (24,860 p.)
0 głosów
2 odpowiedzi 186 wizyt
pytanie zadane 11 października 2020 w C i C++ przez antekelektronik Obywatel (1,120 p.)

92,617 zapytań

141,466 odpowiedzi

319,783 komentarzy

61,999 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!

...