C++ 函数C+的多重声明+;

C++ 函数C+的多重声明+;,c++,compiler-errors,C++,Compiler Errors,我必须重构一个项目,并考虑将源文件和头文件分开。它对“Empregado”类非常有效,但是当我试图将它复制到“Engenheiro”类时,我得到了多声明错误 我试图构建项目时遇到的错误的屏幕截图 cmakfiles\exercicio\u revisao\u refatoracao.dir/objects.a(main.cpp.obj):在函数'ZNK10Engenheiro7getNomeB5cxx11Ev'中: D:/UFMG/UFMG-DCC204/CPP/module3/exercio

我必须重构一个项目,并考虑将源文件和头文件分开。它对“Empregado”类非常有效,但是当我试图将它复制到“Engenheiro”类时,我得到了多声明错误

我试图构建项目时遇到的错误的屏幕截图

cmakfiles\exercicio\u revisao\u refatoracao.dir/objects.a(main.cpp.obj):在函数'ZNK10Engenheiro7getNomeB5cxx11Ev'中:
D:/UFMG/UFMG-DCC204/CPP/module3/exercio revisao refatoraco/Engenheiro.CPP:5:Engenheiro::getNome[abi:cx11]()const的多重定义
CMakeFiles\exercio_revisao_refatoracao.dir/objects.a(Engenheiro.cpp.obj):D:/UFMG/UFMG-DCC204/cpp/module3/exercio revisao refatoracao/engenhenheiro.cpp:5:首先在这里定义
CMakeFiles\exercicio\u revisao\u refatoracao.dir/objects.a(main.cpp.obj):在函数“zn10Engengheiro7SetNomeerknst7\uuuu CXX1112基本\u stringIcSt11char\u TraitSiceee”中:
D:/UFMG/UFMG-DCC204/CPP/Module3/exercicio revisao refatoracao/Engenheiro.CPP:9:Engenheiro::setNome(std:uu cxx11::basic_string const&)的多重定义
CMakeFiles\exercio_revisao_refatoracao.dir/objects.a(Engenheiro.cpp.obj):D:/UFMG/UFMG-DCC204/cpp/module3/exercio revisao refatoracao/Engenheiro.cpp:9:首先在此处定义
CMakeFiles\exercicio\u revisao\u refatoracao.dir/objects.a(main.cpp.obj):在函数“znk10engehiro11getprojetosev”中:
D:/UFMG/UFMG-DCC204/CPP/module3/exercicio revisao refatoraco/Engenheiro.CPP:13:Engenheiro::getProjetos()const的多重定义
CMakeFiles\exercio_revisao_refatoracao.dir/objects.a(Engenheiro.cpp.obj):D:/UFMG/UFMG-DCC204/cpp/module3/exercio revisao refatoracao/Engenheiro.cpp:13:首先在这里定义
CMakeFiles\exercicio\u revisao\u refatoracao.dir/objects.a(main.cpp.obj):在函数“zn10engehiro11setprojetosei”中:
D:/UFMG/UFMG-DCC204/CPP/Modulo3/exercicio revisao REFORATORACAO/Engenheiro.CPP:17:Engenheiro::setProjetos(int)的多重定义
CMakeFiles\exercio_revisao_refatoracao.dir/objects.a(Engenheiro.cpp.obj):D:/UFMG/UFMG-DCC204/cpp/module3/exercio revisao refatoracao/Engenheiro.cpp:17:首先在此处定义
CMakeFiles\exercicio\u revisao\u refatoracao.dir/objects.a(Vendedor.cpp.obj):在函数“ZN8Vendedor7setNomeERKNSt7\u cx1112基本\u stringIcSt11char\u traitsiceaee”中:
D:/UFMG/UFMG-DCC204/CPP/module3/exercicio revisao refatoracao/Vendedor.CPP:5:“Vendedor::setNome(std::uu cx11::basic_string const&)”的多重定义
CMakeFiles\exercicio_revisao_refatoracao.dir/objects.a(main.cpp.obj):D:/UFMG/UFMG-DCC204/cpp/module3/exercicio revisao refatoracao/Vendedor.cpp:5:首先在此处定义
CMakeFiles\exercicio\u revisao\u refatoracao.dir/objects.a(Vendedor.cpp.obj):在函数“ZNK8Vendedor7getNomeB5cxx11Ev”中:
D:/UFMG/UFMG-DCC204/CPP/module3/exercicio revisao refatoracao/Vendedor.CPP:9:Vendedor::getNome[abi:cx11]()const的多重定义
CMakeFiles\exercicio_revisao_refatoracao.dir/objects.a(main.cpp.obj):D:/UFMG/UFMG-DCC204/cpp/module3/exercicio revisao refatoracao/Vendedor.cpp:9:首先在此处定义
CMakeFiles\exercicio\u revisao\u refatoracao.dir/objects.a(Vendedor.cpp.obj):在函数'zn8vendedor15quotatatalanualev'中:
D:/UFMG/UFMG-DCC204/CPP/Modulo3/exercicio revisao REFORATORACAO/Vendedor.CPP:13:“Vendedor::quotaTotalAnual()的多重定义”
CMakeFiles\exercicio_revisao_refatoracao.dir/objects.a(main.cpp.obj):D:/UFMG/UFMG-DCC204/cpp/module3/exercicio revisao refatoracao/Vendedor.cpp:13:首先在此处定义
collect2.exe:错误:ld返回了1个退出状态
我已将所有文件上载到GitHub

Engenheiro的头文件和源文件如下:

恩格海罗

\ifndef ENGENHEIRO\u H
#定义ENGENHEIRO_H
#包括
#包括“Empregado.h”
Engenheiro班:公共商场{
公众:
常量std::string&getNome()常量;
void setNome(常数标准::字符串和nome);
int getProjetos()常量;
无效setProjetos(int projetos);
私人:
std::字符串名称;
国际项目;
};
#完//ENGENHEIRO_H
Engenheiro.cpp

#包括“Empregado.h”
虚空恩普雷加多::塞特拉斯特拉巴哈达斯(双赫拉斯特拉巴哈达斯){
Empregado::horasTrabalhadas=horasTrabalhadas;
}
空荡漾:塞萨拉里奥拉(双萨拉奥拉){
Empregado::萨拉里奥拉=萨拉里奥拉;
}
void Empregado::setQuotaMensalVendas(双quotaMensalVendas){
Empregado::quotaMensalVendas=quotaMensalVendas;
}
double Empregado::getHorasTrabalhadas()常量{
返回horasTrabalhadas;
}
double Empregado::GetSalarioora()常量{
返回萨拉里奥拉;
}
double Empregado::GetQuotAmensSalvendas()常量{
返回报价单;
}
double Empregado::getPagamentoMes()常量{
double horasTrabalhadas=getHorasTrabalhadas();
/**
*结石作为额外的小梁,bônus de 50%se
*tiver mais que 8 horas extras trabalhadas。
*/
如果(horasTrabalhadas>MAX_HORAS_TRABALHADAS){
双x=horasTrabalhadas-MAX_HORAS_TRABALHADAS;
horasTrabalhadas+=x/2;
}
返回horasTrabalhadas*萨拉里奥拉;
}
void Empregado::printInfo(常量std::string&nome、双萨拉里奥、int projetosOuQuota、int tipoFuncionario){
如果(TipoFunctionario==1){

std::cout正如main.cpp中提到的,您正在包括源文件

#include "Engenheiro.cpp"
#include "Vendedor.cpp"
您应该包含相应的头文件

#include "Engenheiro.h"
#include "Vendedor.h
这解决了问题:

1>------ Rebuild All started: Project: ZERO_CHECK, Configuration: Debug x64 ------
1>Checking Build System
2>------ Rebuild All started: Project: exercicio_revisao_refatoracao, Configuration: Debug x64 ------
2>Building Custom Rule C:/Users/juanr/Downloads/exercicio-revisao-refatoracao/CMakeLists.txt
2>Empregado.cpp
2>Engenheiro.cpp
2>main.cpp
2>Vendedor.cpp
2>Generating Code...
2>exercicio_revisao_refatoracao.vcxproj -> C:\Users\juanr\Downloads\exercicio-revisao-refatoracao\build\Debug\exercicio_revisao_refatoracao.exe
========== Rebuild All: 2 succeeded, 0 failed, 0 skipped ==========

请发表一篇文章。如果你不能将所需的代码量减少到一个小例子,那么这就是你应该首先解决的问题。你有
#包括“Engenheiro.cpp”
main.cpp
中。包括头文件,而不是源文件。要理解此问题,需要学习两件事:第一件事是声明和定义之间的区别。声明只是告诉编译器某个地方存在符号。定义是符号的实现(比如函数实现)。你需要学习的第二件事是关于
1>------ Rebuild All started: Project: ZERO_CHECK, Configuration: Debug x64 ------
1>Checking Build System
2>------ Rebuild All started: Project: exercicio_revisao_refatoracao, Configuration: Debug x64 ------
2>Building Custom Rule C:/Users/juanr/Downloads/exercicio-revisao-refatoracao/CMakeLists.txt
2>Empregado.cpp
2>Engenheiro.cpp
2>main.cpp
2>Vendedor.cpp
2>Generating Code...
2>exercicio_revisao_refatoracao.vcxproj -> C:\Users\juanr\Downloads\exercicio-revisao-refatoracao\build\Debug\exercicio_revisao_refatoracao.exe
========== Rebuild All: 2 succeeded, 0 failed, 0 skipped ==========