Podział kodu na kilka części - kłopot z "include".

0

Witajcie mam trywialny problem, mam podzielić ten kod na 3 różne pliki:

main.cpp osoba.cpp oraz osoba.h (dwa ostatnie pliki powinny zawierać elementy związane tylko z klasą cOsoba)

Tu jest ten kod:

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

using namespace std;

class cOsoba
{

private:
	long long pesel = 95041812440;

public:  //Atrybuty
	string imie;
	string nazwisko;
	int wiek;




	//Metody
	void wypisz();

	//cOsoba();
	~cOsoba();
	cOsoba(string imie, string nazwisko, int wiek);




};

void cOsoba::wypisz()
{
	cout << "Imie: " << imie << " Nazwisko: " << nazwisko << " Wiek: " << wiek << " Pesel: " << pesel;
}

/*
cOsoba::cOsoba()
{
imie = "Piotr";
nazwisko = "Kowalski";
wiek = 24;
cout << "Konstruktor zainicjalizowal klase   ";
}
*/
cOsoba::~cOsoba()
{
	cout << "\n\n Destruktor zadzialal.       ";
	system("pause");
}

cOsoba::cOsoba(string imie, string nazwisko, int wiek)
{
	cout << "\nKonstruktor zadzialal: \n\n";
	this->imie = imie;
	this->nazwisko = nazwisko;
	this->wiek = wiek;
}




int main()
{
	string imie, nazwisko;
	int wiek;

	cout << "Wprowadz imie: ";
	cin >> imie;

	cout << "Wprowadz nazwisko: ";
	cin >> nazwisko;

	cout << "Wprowadz wiek: ";
	cin >> wiek;

	cout << "\n";

	cOsoba student(imie, nazwisko, wiek);
	//cOsoba student;// = { "Adam", "Kasperski", 24 };
	student.wypisz();


	_getch();
}

Mógłby ktoś napisać jak to rozdzielić? Bo próbowałem same deklaracje klasy i atrybutów w niej i metod w osoba.h, ale był problem z "include" tak jak pisałem.

0

Deklaracja do nagłówka, definicja do pliku źródłowego.

To jest deklaracja z definicją:

struct Foo{
    void bar(){ cout << "hello" << endl; }
};

(/ Po rozdzieleniu /)
To jest deklaracja:

struct Foo{
    void bar();
};

To jest definicja:

void Foo::bar(){ cout << "hello" << endl; }

Przykładowy podział na pliki:

//Foo.hpp
#pragma once
struct Foo{
    void bar();
};
//Foo.cpp
#include "Foo.hpp"
#include <iostream>
using namespace std;
void Foo::bar(){
    cout << "Hello" << endl;
}
0
spartanPAGE napisał(a):

...

Zobacz jak ja dzielę i powiedz co robię źle:

Header.h:

#ifndef nazwaPliku_hpp
#define nazwaPliku_hpp
/*
tutaj piszesz cały interfejs
*/



class cOsoba
{

private:
	long long pesel;

public:  //Atrybuty
	string imie;
	string nazwisko;
	int wiek;

	void wypisz();

	//cOsoba();
	~cOsoba();
	cOsoba(string imie, string nazwisko, int wiek);




};
#endif

Nie rozpoznaje "string".

cOsoba.cpp:

#include "Header.h"


void cOsoba::wypisz()
{
	cout << "Imie: " << imie << " Nazwisko: " << nazwisko << " Wiek: " << wiek << " Pesel: " << pesel;
}

/*
cOsoba::cOsoba()
{
imie = "Piotr";
nazwisko = "Kowalski";
wiek = 24;
cout << "Konstruktor zainicjalizowal klase   ";
}
*/
cOsoba::~cOsoba()
{
	cout << "\n\n Destruktor zadzialal.       ";
	system("pause");
}

cOsoba::cOsoba(string imie, string nazwisko, int wiek)
{
	cout << "\nKonstruktor zadzialal: \n\n";
	this->imie = imie;
	this->nazwisko = nazwisko;
	this->wiek = wiek;
}

Nie rozpoznaje "cout" i "string".

main.cpp:

#include "Header.h"
#include<string>
#include<iostream>
#include<conio.h>
/*
tutaj piszesz definicje funkcji
*/

long long pesel = 95041812440;

using namespace std;

int main()
{
	string imie, nazwisko;
	int wiek;

	cout << "Wprowadz imie: ";
	cin >> imie;

	cout << "Wprowadz nazwisko: ";
	cin >> nazwisko;

	cout << "Wprowadz wiek: ";
	cin >> wiek;

	cout << "\n";

	cOsoba *pStudent1;
	pStudent1 = new cOsoba(imie, nazwisko, wiek);
	//cOsoba student;// = { "Adam", "Kasperski", 24 };


	cOsoba student(imie, nazwisko, wiek);
	student.wypisz();


	_getch();
}

Gdzie dodać include żeby mi je rozpoznawało w pliku cOsoba i nagłówkowym??

0

Skąd ma wiedzieć, że istnieje coś takiego jak string?
Dodaj do nagłówka tę linię:

#include <string>
0

nie rozpoznaje, bo nie ma odpowiednich nagłówków.

0
spartanPAGE napisał(a):

Skąd ma wiedzieć, że istnieje coś takiego jak string?
Dodaj do nagłówka tę linię:

#include <string>

Jak dodaję to też nie działa....

0

Rozpoznaje std::string, ponieważ siedzi to w przestrzeni nazw.

0
spartanPAGE napisał(a):

Rozpoznaje std::string, ponieważ siedzi to w przestrzeni nazw.

Co mam konkretnie zrobić, bo z tego co piszesz, ciężko coś wynieść.

1

zamien

string

na std::string

 i dodaj <code class="cpp">#include <string>
1

Dodaj przedrostem std:: we wszystkich wystąpieniach string lub użyj przestrzeni nazw using namespace std;, chociaż jest to gorsze rozwiązanie.
Takie rzeczy są przerabiane na początku każdego kursu dla raczkujących.

0
spartanPAGE napisał(a):

Rozpoznaje std::string, ponieważ siedzi to w przestrzeni nazw.

Co jest źle!!!!!!!!!!!!!!!!!!!!!!!?????

Czy wy zawsze musicie wszystko utrudniać, zamiast pomagać?

Dodałem std i mam "missing type specifier - int assumed. Note: C++ does not support default -int.

Kod:

"Header.h":

#ifndef nazwaPliku_hpp
#define nazwaPliku_hpp

/*
tutaj piszesz cały interfejs
*/



class cOsoba
{

private:
	long long pesel;

public:  //Atrybuty
	std::string imie;
	std::string nazwisko;
	int wiek;

	void wypisz();

	//cOsoba();
	~cOsoba();
	cOsoba(std::string imie, std::string nazwisko, int wiek);




};
#endif

cOsoba.cpp:

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



void cOsoba::wypisz()
{
	std::cout << "Imie: " << imie << " Nazwisko: " << nazwisko << " Wiek: " << wiek << " Pesel: " << pesel;
}

/*
cOsoba::cOsoba()
{
imie = "Piotr";
nazwisko = "Kowalski";
wiek = 24;
cout << "Konstruktor zainicjalizowal klase   ";
}
*/
cOsoba::~cOsoba()
{
	std::cout << "\n\n Destruktor zadzialal.       ";
	system("pause");
}

cOsoba::cOsoba(std::string imie, std::string nazwisko, int wiek)
{
	std::cout << "\nKonstruktor zadzialal: \n\n";
	this->imie = imie;
	this->nazwisko = nazwisko;
	this->wiek = wiek;
}

main.cpp:

#include "Header.h"
#include<string>
#include<iostream>
#include<conio.h>
/*
tutaj piszesz definicje funkcji
*/

long long pesel = 95041812440;

using namespace std;

int main()
{
	string imie, nazwisko;
	int wiek;

	cout << "Wprowadz imie: ";
	cin >> imie;

	cout << "Wprowadz nazwisko: ";
	cin >> nazwisko;

	cout << "Wprowadz wiek: ";
	cin >> wiek;

	cout << "\n";

	cOsoba *pStudent1;
	pStudent1 = new cOsoba(imie, nazwisko, wiek);
	//cOsoba student;// = { "Adam", "Kasperski", 24 };


	cOsoba student(imie, nazwisko, wiek);
	student.wypisz();


	_getch();
}

@Edit

Ok głupi Visual, miał jakiś problem, a po ponownym uruchomieniu już kompiluje, dzięki za pomoc.

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