[C++]Problem z stringami w klasie


(Damian True) #1

Mam mieć klasę której nagłówek ma znajdować się w oddzielnym pliku i implementacja w oddzielnym pliku. No i tak mam, chcę jednak aby obiekt miał opis w postaci string. Mam problem bo kompilator (VS 2012) cały czas mi wyrzuca błędy i podkreśla string. Nie wiem jak powinno się poprawnie przypisywać obiektom zmienne string. Ewentualnie jak to zrobić na charach jeśli prościej.

////source.cpp
#include <iostream>
#include <string>

//nagłówki klas
#include "baza.h"
#include "gracze.h"
#include "przeszkody.h"

using namespace std;

int main()
{
	//utworzenie gracza
	gracze gracz(100, 'opis');
	cout<<gracz.pokaz_zycie()<<endl;
	cout<<gracz.krzyki()<<endl;

	system("Pause");
	return 0;

}

////gracze.h
#pragma once

class gracze
{
public:
	int zycie;
	string okrzyk;

	gracze(int _zycie, string _okrzyk);
	~gracze(void);

	int pokaz_zycie(); //metoda zwracajaca zycie
	string krzyki(); //metoda zwracajaca okrzyk

	
};

////gracze.cpp
#include "gracze.h"


gracze::gracze(int _zycie, string _okrzyk)
{
	zycie = _zycie;
	okrzyk = _okrzyk;
}


gracze::~gracze(void)
{
}

int gracze::pokaz_zycie()
{
	return zycie;
}
string gracze::krzyki()
{
	return okrzyk;
}

(Rolek0) #2

W nagłówku gracze.h używasz string ale nie includujesz w nim nagłówka string.

W module source.cpp includujesz string przed gracze.h, więc klasa string jest dostępna, ale pełna nazwa to std::string, a using namespace std; masz poniżej #include “gracze.h”.

Natomiast w gracze.cpp w ogóle nie includujesz string.

Najlepiej w nagłówkach od razu includować inne wymagane nagłówki, żeby nie musieć o tym pamiętać przy includowaniu w modułach (w końcu nagłówki są po to by nie pisać w każdym module tych samych kawałków kodu :wink: ).

(PS. W nagłowkach lepiej nie dawać using namespace, tylko używać pełnych nazw, bo w większych projektach może to czasami powodować komplikacje :wink: (a w modułach using dawać dopiero po wszystkich includach))


(Damian True) #3

Poprawiłem source.cpp ale i tak się krzaczy. Przestawiłem kolejność jak mówiłeś. :confused: Wystawiłem na github bo wygodniej 

 

https://gist.github.com/GarryMoveOut/58e2d0550fb387c977b7


(Rolek0) #4

Nie.

Mój poprzedni post miał 2 akapity; w pierwszym napisałem dlaczego kompilator wywalał błędy, a w drugim opisałem jak to najlepiej rozwiązać.

PS. http://www.youtube.com/watch?v=wDKeJ79TBsg


(Damian True) #5

Teraz dokładnie się wczytałem i poprawiłem. Wszystko śmiga. Ale teraz mam problem z dziedziczeniem, ale to oddzielny wątek założę.