C++中子类重定义错误
Error in redefinition of subclass 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_)
^
而且找不到问题所在
文件是:
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;
}
我知道主体不见了...但这肯定不是问题所在!
似乎编译器试图在 uni.cpp
文件中重新定义 类。
谢谢!
因为,您定义了 Studente
的构造函数两次。
在 header 中:
Studente():Persona(){};
这应该只是 Studente();
与其他构造函数相同。
问题是 header:
中的构造函数定义
Studente():Persona(){};
将其替换为声明,因为您在 .cpp 中有一个定义:
Studente();
在 uni.h
在 class Studente
你有
Studente():Persona(){};
这声明并定义了 Studente
的默认构造函数。然后在 uni.cpp
你有
Studente::Studente() : Persona(){
SetFacolta("");
SetCorso("");
}
其中重新定义了默认构造函数。您需要删除其中一个定义或更改
Studente():Persona(){};
到
Studente();
我从编译器得到以下错误:
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_)
^
而且找不到问题所在
文件是:
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;
}
我知道主体不见了...但这肯定不是问题所在!
似乎编译器试图在 uni.cpp
文件中重新定义 类。
谢谢!
因为,您定义了 Studente
的构造函数两次。
在 header 中:
Studente():Persona(){};
这应该只是 Studente();
与其他构造函数相同。
问题是 header:
中的构造函数定义Studente():Persona(){};
将其替换为声明,因为您在 .cpp 中有一个定义:
Studente();
在 uni.h
在 class Studente
你有
Studente():Persona(){};
这声明并定义了 Studente
的默认构造函数。然后在 uni.cpp
你有
Studente::Studente() : Persona(){
SetFacolta("");
SetCorso("");
}
其中重新定义了默认构造函数。您需要删除其中一个定义或更改
Studente():Persona(){};
到
Studente();