在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
的构造函数。
在标题中:Studente():Persona(){};
这应该只是Studente();
与其他构造函数相同。
问题在于标头中的构造函数定义:
Studente():Persona(){};
用声明替换它,因为.cpp:中有一个定义
Studente();
在class Studente
的uni.h
中,您有
Studente():Persona(){};
这声明并定义了Studente
的默认构造函数。然后在uni.cpp
中,您有
Studente::Studente() : Persona(){
SetFacolta("");
SetCorso("");
}
它重新定义了默认构造函数。您需要删除其中一个定义或更改
Studente():Persona(){};
至
Studente();
相关文章:
- 避免在C++中重复子类定义
- 使用子类覆盖基类中定义的函数
- C++ 确保子类为常量提供自定义值
- 如何为定义的情况创建子类?
- 如何在子类中重新定义数组大小?
- 无法使用在子类中定义的虚拟getter实现基类
- 运算符的歧义错误<<自定义 std::ostream 子类中的重载
- 是否有 lint 工具可以检查子类虚拟函数是否与父类定义匹配?
- 使用子类中的类型定义扩展模板类
- 模板化类继承的子类定义中的错误
- 从模板化类中的子类访问定义
- 使用基类构造函数的子类构造函数的大纲定义
- 共享库中非模板基的模板子类导致未定义的符号类型信息'class'链接错误
- 在子类中定义可变参数函数专用化
- 如何使函数返回由子类定义的值?C++
- 子类ConstexPR类以获得不同的用户定义的转换行为
- 是否可以子类 std::unique_ptr 透明地应用自定义删除器
- 我有一个为 cpp 中的某个类定义的模板函数 - 不是 hpp.可以由子类使用吗?
- 在父类中声明并在子类中定义
- 子类化 vtk 样式:未定义的引用