Błąd podczas kompilacji visual studio [C++]

0

Witam podczas nauki stworzyłem klasę która dziedziczy po innej klasie lecz nie chce mi się to kompilować i pokazuje mi taki error Error 1 error C2084: function 'Uczen::Uczen(std::string,float,int,std::string,std::string,std::string,int,int,float,float)' already has a body
Wiem ,żę to jest głupi program itp lecz dopiero się uczę programować i chce po nauczeniu się kolejnych działów dodawać nowe rzeczy do kodu.

#include "Uczen.h"
#include "Szkoła.h"
#include<iostream>
#include<fstream>


Uczen::Uczen(std::string nss , float oo , int iuu,std::string imieu, std::string nazwiskou, std::string miejscowscu, int peselu, int roku, float ocenau, float sredniau) :Szkola(nss, oo, iuu)
{
	imie=imieu;
	nazwisko=nazwiskou;
	miejscowsc=miejscowscu;
    pesel=peselu;
	rok_urodzenia=roku;
	ocena=ocenau;
	srednia = sredniau;

}

Uczen::~Uczen()
{
}
void Uczen::dodawanie_ucznia()
{
	std::fstream plik;
	plik.open(Szkola::fnazwa_szkoly(), std::ios::out);
	if (plik.good())
	{
		plik << std::endl;
		std::cout << "podaj imie ucznia: ";
		std::cin >> imie;
		plik << "Imie ucznia: " << imie << std::endl;
		std::cout << "podaj nazwisko ucznia: ";
		std::cin >> nazwisko;
		plik << "Nazwisko ucznia: " << nazwisko << std::endl;
		std::cout << "podaj pesel ucznia ";
		std::cin >> pesel;
		plik << "Pesel ucznia: " << pesel << std::endl;
	}
	else
	{
		std::cout << "error w uczniu nie da sie dodac do pliku jego specyfikacji!!!!!!!!!!!!!!!!!!!!  " << std::endl;
	}


} 
0

Jako, że nie podałeś kodu Uczen.h to fusy mi powiedziały, że masz w klasie

Uczen(.....) {}

zamiast

Uczen(.....);

BTW użyj listy inicjalizacyjnej w konstruktorze zamiast przypisań.

0

to jest moja uczen.h lecz jak zmienię tak jak mi napisałeś to wyskakują tylko kolejne błędy.

#pragma once
#include "Szkoła.h"

class Uczen :public Szkola
{
	std::string imie;
	std::string nazwisko;
	std::string miejscowsc;
	int pesel;
	int rok_urodzenia;
	float ocena;
	float srednia;
	
public:

	Uczen(std::string ns = "wa", float o = 0, int iu = 0, std::string imieu = "brak imienia", std::string nazwiskou = "bez nazwiska", std::string miejscowscu = "Bez miejscowosci", int peselu = 0, int roku = 0, float ocenau = 0, float sredniau = 0) : Szkola(ns, o, iu){}
	~Uczen();

	void dodawanie_ucznia();


};

 
0

z tym dziedziczeniem po szkoła to przegiąłeś,

dla każdego nowego ucznia tworzysz nową szkołę teraz

szkoła powinna zawierać std::vector<Uczen>

1

Po prostu

Uczen(std::string ns = "wa", float o = 0, int iu = 0, std::string imieu = "brak imienia", std::string nazwiskou = "bez nazwiska", std::string miejscowscu = "Bez miejscowosci", int peselu = 0, int roku = 0, float ocenau = 0, float sredniau = 0);

To wygląda strasznie, ale myślę że o tym wiesz.
Z ciekawości, po co u na końcu nazw zmiennych?

0

dziekuje za pomoc ale teraz nie wiem czemu nie chce mi dopisywać do pliku o wczesniej zadanej nazwie dalszych informacji. dopisywałem "u" żeby łatwjej mi było odróżnić typy zmienych tych w klasie od tych w konstruktorze

0

Jakbyś użył listy inicjalizacyjnej to byś nie musiał odróżnić.
Nigdzie nie podałeś flagi, że chcesz dopisać, to czemu miałoby dopisać.

0

ale nawet po dopisaniu ios::app nic nie zmienia wg chyba nie przekazuje nazwy szkoly

0

No to sprawdź co tamta funkcja fnazwa_szkoly() zwraca. I to f jest bardzo brzydkie.

0

tworzy plik o nazwie takiej jak jest w konstruktorze domyślnym.

0

więc tak
szkola.h

#pragma once
#include<iostream>
#include<string>
#include "Szkoła.h"

class Szkola
{
	int ilosc_uczniow;
	float oceny;

public:
	Szkola(std::string ns , float o, int iu);
	~Szkola();
	std::string nazwa_szkoly;

	int filosc_uczniow(){ return ilosc_uczniow; };
	std::string fnazwa_szkoly(){ return nazwa_szkoly; };
	void dodawanie_szkoly();
};

 

uczen.h

#pragma once
#include "Szkoła.h"

class Uczen :public Szkola
{
	std::string imie;
	std::string nazwisko;
	std::string miejscowsc;
	int pesel;
	int rok_urodzenia;
	float ocena;
	float srednia;
	
public:

	Uczen(std::string ns = "wa", float o = 0, int iu = 0, std::string imieu = "brak imienia", std::string nazwiskou = "bez nazwiska", std::string miejscowscu = "Bez miejscowosci", int peselu = 0, int roku = 0, float ocenau = 0, float sredniau = 0);
	~Uczen();

	void dodawanie_ucznia();


};

 

szkola.cpp

 #include<iostream>
#include "Szkoła.h"
#include<fstream>


Szkola::Szkola(std::string ns, float o, int iu)
{

	nazwa_szkoly = ns;
	oceny = o;
	ilosc_uczniow = iu;


}


Szkola::~Szkola()
{
}
void Szkola::dodawanie_szkoly()
	{
	std::cout << "Podaj nazwe szkoły: ";
	std::cin >> nazwa_szkoly;
	std::cout << "Ile uczniów posiada szkola: ";
	std::cin >> ilosc_uczniow;
	std::fstream plik;
	plik.open(nazwa_szkoly, std::ios::out);
	if (!plik.good())
		std::cout << "nie otwarto pliku do zapisu error!!! ";
	else
	{
		plik << "Nazwa szkolu: " << nazwa_szkoly << std::endl;
		plik << "Ilosc uczni " << ilosc_uczniow << std::endl;

	}
	plik.close();
}

uczen.cpp

#include "Uczen.h"
#include "Szkoła.h"
#include<iostream>
#include<fstream>


Uczen::Uczen(std::string nss , float oo , int iuu,std::string imieu, std::string nazwiskou, std::string miejscowscu, int peselu, int roku, float ocenau, float sredniau) :Szkola(nss, oo, iuu)
{
	imie=imieu;
	nazwisko=nazwiskou;
	miejscowsc=miejscowscu;
    pesel=peselu;
	rok_urodzenia=roku;
	ocena=ocenau;
	srednia = sredniau;

}

Uczen::~Uczen()
{
}
void Uczen::dodawanie_ucznia()
{
	
	std::fstream plik;
	
	plik.open(Szkola::fnazwa_szkoly(), std::ios::out||std::ios::app);
	if (plik.good())
	{
		plik << std::endl;
		std::cout << "podaj imie ucznia: ";
		std::cin >> imie;
		plik << "Imie ucznia: " << imie << std::endl;
		std::cout << "podaj nazwisko ucznia: ";
		std::cin >> nazwisko;
		plik << "Nazwisko ucznia: " << nazwisko << std::endl;
		std::cout << "podaj pesel ucznia ";
		std::cin >> pesel;
		plik << "Pesel ucznia: " << pesel << std::endl;
	}
	else
	{
		std::cout << "error w uczniu nie da sie dodac do pliku jego specyfikacji!!!!!!!!!!!!!!!!!!!!  " << std::endl;
	}


} 
0

Przecież to się nawet nie skompiluje:

std::ios::out||std::ios::app

Ustawianie flag się odbywa za pomocą operatorów bitowych, czyli w tym przypadku

std::ios::out | std::ios::app

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