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

visual C++ i stringi

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,108 wizyt
pytanie zadane 10 sierpnia 2017 w C i C++ przez Darven Użytkownik (860 p.)

Witam.

 

Przerzucam się na visual C++ od jakiegoś czasu i wciąż odkrywam problemy, które wcześniej nie występowały przy pisaniu kodu w code:block.

Mam taki zapis:

 

class klasa
{
	int x, y;
	string nazwa;
public:
	klasa(string n = "nazwa", int xx = 0, int yy = 0)
	{
		nazwa = n;
		x = xx;
		yy = y;
	}
	void wyswietl()
	{
		cout << nazwa << endl; // nie można wyświetlić stringa, program sie nie kompiluje

	}
};

Problem pojawia sie w momencie gdy w funkcji "wyswietl()" próbuje wyrzucić stringa na ekran. Kod się po prostu nie kompiluje, podkreśla mi na czerwono "<<" przed "nazwa". Żeby było zabawniej, gdy dam tam np. x lub y, to wszystko działa. Może brzmi to niedorzecznie, ale czy visual c++ jest w jakiś sposób przewrażliwiony na punkcie stringów?  Ten sam kod kompiluje się normalnie w code:block.

komentarz 10 sierpnia 2017 przez Szahid Pasjonat (20,970 p.)
Podaj treść tego błędu

 

ps w linii 10 chyba odwrotnie napisałeś zmienne
komentarz 10 sierpnia 2017 przez criss Mędrzec (172,590 p.)

Ludzie, podawajcie treści błędów, plox. To nie jest tak, że "podkreśla na czerwono i nie kompiluje DDD:" mówi wszystko. Kompilator jest w stanie wygenerować więcej niż jeden błąd.

2 odpowiedzi

+2 głosów
odpowiedź 10 sierpnia 2017 przez unknown Nałogowiec (39,560 p.)
wybrane 10 sierpnia 2017 przez Darven
 
Najlepsza

masz:

#include <string>

?

komentarz 10 sierpnia 2017 przez Darven Użytkownik (860 p.)

Zapomniałem dodać, że w zapytaniu dałem tylko fragment kodu, nie cały. 

Tak prezentuje się w całości:

 

#include <iostream>
#include <conio.h>
#include "stdafx.h" //oczywiscie w code:block nie ma tej biblioteki
using namespace std;

class klasa
{
    int x, y;
    string nazwa;
public:
    klasa(string n = "nazwa", int xx = 0, int yy = 0)
    {
        nazwa = n;
        x = xx;
        yy = y;
    }
    void wyswietl()
    {
        cout << nazwa << endl; // nie można wyświetlić stringa, program sie nie kompiluje

    }
};


int main()
{
    klasa obiekt;

    obiekt.wyswietl();

}

I tak, zauważyłem że nie ma stringa. Teraz działa :D Ale nie rozumiem, dlaczego mimo jego braku, kod kompiluje się w code:block?? Skoro nie było takiej potrzeby w coe:block to nie zauważyłem początkowo w visualu jego braku, od takie niedopatrzenie spowodowane tym, że code:block kod działa poprawnie.

Jeśli chodzi o błąd to piszę: " "<<" nie pasuje do tych argumentów operacji typu operandów srd::ostream<<std::string" 

Oczywiście po dodaniu biblioteki string działa. Ale w code block, działa nawet bez niej.

komentarz 10 sierpnia 2017 przez SebekChlebek Stary wyjadacz (11,290 p.)
Przeczytaj mój komentarz do innej odpowiedzi, tam wyjaśniłem czemu w code::blocks jest inaczej.
0 głosów
odpowiedź 10 sierpnia 2017 przez Bondrusiek Maniak (61,440 p.)

Witam,

dodałeś do projektu bibliotekę iostream oraz globalną przestrzeń nazw. Może tego Ci brakuje:

#include <iostream>
using namespace std;

 

komentarz 10 sierpnia 2017 przez SebekChlebek Stary wyjadacz (11,290 p.)

gdy dam tam np. x lub y, to wszystko działa

To nie ma nic z tym wspólnego. Brakuje mu biblioteki <string>.

komentarz 10 sierpnia 2017 przez Bondrusiek Maniak (61,440 p.)

Stworzyłem taki kod i działa:

#include <iostream>

using namespace std;
class klasa
{
    int x, y;
    string nazwa;
public:
    klasa(string n = "nazwa", int xx = 0, int yy = 0)
    {
        nazwa = n;
        x = xx;
        yy = y;
    }
    void wyswietl()
    {
        cout << nazwa << endl; // nie można wyświetlić stringa, program sie nie kompiluje

    }
};

int main()
{
    klasa test;
    test.wyswietl();
    return 0;
}

W sumie nie wiem jakiego kompilatora używa. Może jakiś starszy standard c++ i dlatego musi jeszcze dołączyć bibliotekę <string>.

komentarz 10 sierpnia 2017 przez SebekChlebek Stary wyjadacz (11,290 p.)
Niektóre implementacje iostream include'ują bibliotekę string, ale żeby kod był w pełni poprawny to wszędzie gdzie używasz std::string trzeba dodawać bibliotekę string.

Najprawdopodobniej używa domyślnego kompilatora VS

Podobne pytania

0 głosów
1 odpowiedź 1,483 wizyt
pytanie zadane 5 grudnia 2017 w C i C++ przez Damian Prymus Początkujący (380 p.)
–2 głosów
2 odpowiedzi 553 wizyt
pytanie zadane 20 sierpnia 2020 w C i C++ przez Drożdżówka Obywatel (1,870 p.)
+1 głos
3 odpowiedzi 621 wizyt
pytanie zadane 10 stycznia 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)

93,112 zapytań

142,092 odpowiedzi

321,635 komentarzy

62,453 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...