i von Compiler erhalten folgende Fehlermeldung:Fehler bei Neudefinition der Unterklasse in C++
uni.cpp:63:1: error: redefinition of ‘Studente::Studente()’
Studente::Studente() : Persona(){
^
In file included from uni.cpp:1:0:
uni.h:34:5: note: ‘Studente::Studente()’ previously defined here
Studente():Persona(){};
^
uni.cpp:68:1: error: redefinition of ‘Studente::Studente(std::__cxx11::string, std::__cxx11::string, int, int, int, std::__cxx11::string, std::__cxx11::string)’
Studente::Studente(string nome_,string cognome_,int anno_,int mese_,int giorno_,string facolta_,string corso_) : Persona(nome_,cognome_,anno_,mese_,gi
^
In file included from uni.cpp:1:0:
uni.h:35:5: note: ‘Studente::Studente(std::__cxx11::string, std::__cxx11::string, int, int, int, std::__cxx11::string, std::__cxx11::string)’ previously defined here
Studente(string nome_,string cognome_,int anno_,int mese_,int giorno_,string facolta_,string corso_) : Persona(nome_,cognome_,anno_,mese_,giorno_)
^
und können nicht herausfinden, was falsch ist
Die Datei ist:
UNI.H
#ifndef _UNI_H_
#define _UNI_H_
#include <string>
#include <iostream>
using namespace std;
class Persona{
private:
string nome;
string cognome;
int anno;
int mese;
int giorno;
public:
Persona();
Persona(string nome_,string cognome_,int anno_,int mese_,int giorno_);
void SetNome(string nome_);
void SetCognome(string cognome_);
void SetAnno(int anno_);
void SetMese(int mese_);
void SetGiorno(int giorno_);
string GetNome();
string GetCognome();
int GetAnno();
int GetMese();
int GetGiorno();
};
class Studente : public Persona{
private:
string facolta;
string corso;
public:
Studente():Persona(){};
Studente(string nome_,string cognome_,int anno_,int mese_,int giorno_,string facolta_,string corso_) : Persona(nome_,cognome_,anno_,mese_,giorno_){};
void SetFacolta(string facolta_);
void SetCorso(string corso_);
string GetFacolta();
string GetCorso();
};
#endif
UNI.CPP
#include "uni.h"
#include <iostream>
#include <string>
using namespace std;
Persona::Persona(){
SetNome("");
SetCognome("");
SetAnno(0);
SetMese(0);
SetGiorno(0);
}
Persona::Persona(string nome_,string cognome_,int anno_,int mese_,int giorno_){
SetNome(nome_);
SetCognome(cognome_);
SetAnno(anno_);
SetMese(mese_);
SetGiorno(giorno_);
}
void Persona::SetNome(string nome_){
nome=nome_;
}
void Persona::SetCognome(string cognome_){
cognome=cognome_;
}
void Persona::SetAnno(int anno_){
anno=anno_;
}
void Persona::SetMese(int mese_){
mese=mese_;
}
void Persona::SetGiorno(int giorno_){
giorno=giorno_;
}
string Persona::GetNome(){
return nome;
}
string Persona::GetCognome(){
return cognome;
}
int Persona::GetAnno(){
return anno;
}
int Persona::GetMese(){
return mese;
}
int Persona::GetGiorno(){
return giorno;
}
Studente::Studente() : Persona(){
SetFacolta("");
SetCorso("");
}
Studente::Studente(string nome_,string cognome_,int anno_,int mese_,int giorno_,string facolta_,string corso_) : Persona(nome_,cognome_,anno_,mese_,giorno_){
SetFacolta(facolta_);
SetCorso(corso_);
}
void Studente::SetFacolta(string facolta_){
facolta=facolta_;
}
void Studente::SetCorso(string corso_){
corso=corso_;
}
string Studente::GetFacolta(){
return facolta;
}
string Studente::GetCorso(){
return corso;
}
Ich weiß, das Haupt fehlt ... aber das ist sicher nicht das Problem! Scheint, dass der Compiler versucht, die Klassen in der uni.cpp
-Datei neu zu definieren. Danke!
Dies ist ändern nicht das Problem, sondern die Namen, die mit einem Unterstrich beginnen mit einem Großbuchstaben ('_UNI_H_') und Namen gefolgt die zwei aufeinanderfolgende Unterstriche enthalten, sind für die Implementierung reserviert. Benutze sie nicht. –