即使我检查了ive,也没有得到未定义的参考错误,但是在头文件包含,头文件或.cpp文件中的错误函数名称中均未发现差异。香港专业教育学院也检查了天气,我的函数调用那是错误的,但似乎都正确。我以前从来没有处理过这种问题,我完全陷入了困境。我想这可能是一堆代码,所以只要您考虑我以前的尝试,如果您有什么提示让我自己对待它,我就已经足够好了。
g++ main.cpp republica.cpp morador.cpp tarefa.cpp conta.cpp -o SRO.o
/usr/bin/ld: /tmp/cc1XrC11.o: in function `gerenciarMoradores(tarefa**, morador**)':
main.cpp:(.text+0x1579): undefined reference to `pessoa::getNome[abi:cxx11](morador*)'
/usr/bin/ld: main.cpp:(.text+0x1694): undefined reference to `pessoa::setNome(morador*,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
/usr/bin/ld: main.cpp:(.text+0x16cd): undefined reference to `pessoa::setIdade(morador*,
int)'
/usr/bin/ld: main.cpp:(.text+0x16fa): undefined reference to
`pessoa::setHierarquia(morador*, int)'
/usr/bin/ld: main.cpp:(.text+0x1739): undefined reference to
`pessoa::setAniversario(morador*, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >)'
/usr/bin/ld: main.cpp:(.text+0x1a4f): undefined reference to `pessoa::getNome[abi:cxx11]
(morador*)'
/usr/bin/ld: /tmp/cc1XrC11.o: in function `gerenciarRepublica(int, morador**, tarefa**,
republica*)':
main.cpp:(.text+0x20e6): undefined reference to `rep::setNome(republica*,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
/usr/bin/ld: main.cpp:(.text+0x2109): undefined reference to
`rep::setQtd_morador(republica*, int)'
/usr/bin/ld: main.cpp:(.text+0x2122): undefined reference to `rep::setSaldo(republica*,
float)'
/usr/bin/ld: main.cpp:(.text+0x2139): undefined reference to
`rep::setQtd_morador(republica*, int)'
/usr/bin/ld: /tmp/cc1XrC11.o: in function `controledeTarefas(int, tarefa**)':
main.cpp:(.text+0x26e9): undefined reference to `task::getNome[abi:cxx11](tarefa*)'
/usr/bin/ld: main.cpp:(.text+0x27d6): undefined reference to `task::setNome(tarefa*,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
/usr/bin/ld: main.cpp:(.text+0x2809): undefined reference to `task::setHorario(tarefa*,
int)'
/usr/bin/ld: /tmp/cc1NzJ6p.o: in function `imprimeRep(republica*)':
republica.cpp:(.text+0x170): undefined reference to `rep::getNome[abi:cxx11](republica*)'
/usr/bin/ld: republica.cpp:(.text+0x1d4): undefined reference to
`rep::getQtd_morador(republica*)'
/usr/bin/ld: republica.cpp:(.text+0x238): undefined reference to `rep::getSaldo(republica*)'
/usr/bin/ld: /tmp/ccRWurEO.o: in function `imprimeMoradores(morador**)':
morador.cpp:(.text+0xd8): undefined reference to `pessoa::getNome[abi:cxx11](morador*)'
/usr/bin/ld: morador.cpp:(.text+0x11c): undefined reference to `pessoa::getIdade(morador*)'
/usr/bin/ld: /tmp/ccVsueeD.o: in function `salvaLista(lista*)':
conta.cpp:(.text+0x673): undefined reference to `conta::getOp(movimentacao*)'
/usr/bin/ld: /tmp/ccVsueeD.o: in function `editaMovm(int, lista*)':
conta.cpp:(.text+0x1394): undefined reference to `conta::setCod(movimentacao*, int)'
/usr/bin/ld: conta.cpp:(.text+0x13bd): undefined reference to `conta::setNome(movimentacao*,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
/usr/bin/ld: conta.cpp:(.text+0x13e2): undefined reference to
`conta::setValor(movimentacao*, float)'
/usr/bin/ld: conta.cpp:(.text+0x13fd): undefined reference to `conta::setOp(movimentacao*,
bool)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:2: all] Error 1
头文件是
#include <iostream>
#include <string>
#include "tarefa.hpp"
using namespace std;
typedef struct morador Morador;
Morador* alocaMorador(string nome, int idade, int hierarquia, Tarefa** tarefa, string
anniversario);
void imprimeMoradores(Morador** a);
void deletaMorador(Morador* a);
namespace pessoa{
string getNome(Morador* a);
void setNome(Morador* a, string b);
int getIdade(Morador* a);
void setIdade(Morador* a, int b);
int getHierarquia(Morador* a);
void setHierarquia(Morador* a, int hierarquia);
string getAniversario(Morador*a);
void setAniversario(Morador* a, string aniversario);
}
main.cpp是
#include <iostream>
#include <unistd.h>
#include <string>
#include "conta.hpp"
#include "tarefa.hpp"
#include "morador.hpp"
#include "republica.hpp"
using namespace std;
void menu(int a, int b);
void gerenciarMoradores(Tarefa** tarefas, Morador** aux);
void gerenciarRepublica(int flag, Morador** moradores, Tarefa** tarefas, Rep* aux);
void controledeTarefas(int flag, Tarefa** aux);
void controleFinanceiro(int flag, Lista* aux);
int main(int argc, char const *argv[]) {
Rep* rep;
Morador** moradores = new Morador*[12];
Tarefa** tarefas;
Lista* financeiro;
int flag;
cout << "\e[8;18;74t";
cout << "\033[2J\033[1;1H";
cout<<"Deseja abrir uma republica nova(1) ou deseja abrir uma republica salva(2)? (0 para
sair): ";cin>>flag;
while(flag<0||flag>2){
cout << "\e[8;18;74t";
cout << "\033[2J\033[1;1H";
cout<<"INVALIDO, por favor selecione 1-abrir uma republica nova||2-abrir uma republica
salva||0-Sair : ";
cin>>flag;
}
if(flag==0){
cout << "\e[8;18;74t";
cout << "\033[2J\033[1;1H";
cout << "\t\t\tSAINDO!!!\n\n\n";
sleep(1);
cout << "\e[8;18;74t";
cout << "\033[2J\033[1;1H";
return 0;
}
else{
gerenciarRepublica(flag, moradores, tarefas, rep);
controleFinanceiro(flag, financeiro);
}
int op;
menu(0,0);
cin>>op;
while(op!=0){
switch (op){
case 1:
gerenciarRepublica(0, moradores, tarefas,rep);
menu(0,0);
break;
case 2:
gerenciarMoradores(tarefas, moradores);
menu(0,0);
break;
case 3:
controledeTarefas(0, tarefas);
menu(0,0);
break;
case 4:
controleFinanceiro(0, financeiro);
menu(0,0);
break;
default:
menu(1, 0);
break;
}
cin>>op;
}
cout << "\e[8;18;74t";
cout << "\033[2J\033[1;1H";
cout << "\t\t\tSAINDO!!!\n\n\n";
sleep(1);
cout << "\e[8;18;74t";
cout << "\033[2J\033[1;1H";
return 0;
}
morador.cpp(在其中实现了功能):
#include "morador.hpp"
struct morador{
string nome;
int idade;
int hierarquia;
Tarefa** tarefa;
string aniversario;
};
Morador* alocaMorador(string nome, int idade, int hierarquia, Tarefa**
tarefa, string anniversario){
Morador* aux = new Morador;
aux->nome = nome;
aux->idade = idade;
aux->hierarquia = hierarquia;
aux->tarefa = tarefa;
aux->aniversario = anniversario;
return aux;
}
void imprimeMoradores(Morador** a){
for(int i=0; i<12; i++){
cout<<pessoa::getNome(a[i])<<" Idade: "<<pessoa::getIdade(a[i]);
if(a[i]->hierarquia == 12)
cout<<" Bixo ";
else if(a[i]->hierarquia == 11)
cout<<" Semi-Bixo ";
else if(a[i]->hierarquia <= 10&&a[i]->hierarquia>1)
cout<<" Morador -"<<i;
else
cout<<" Decano";
cout<<" | Nascimento "<<a[i]->aniversario<<endl;
}
}
void deletaMorador(Morador* a){
delete[] a;
}
string getNome(Morador* a){
return a->nome;
}
void setNome(Morador* a, string b){
a->nome = b;
}
int getIdade(Morador* a){
return a->idade;
}
void setIdade(Morador* a, int b){
a->idade = b;
}
int getHierarquia(Morador* a){
return a->hierarquia;
}
void setHierarquia(Morador* a, int hierarquia){
a->hierarquia = hierarquia;
}
string getAniversario(Morador*a){
return a->aniversario;
}
void setAniversario(Morador* a, string b){
a->aniversario = b;
}
您需要将代码封装在与标题相同的名称空间声明内的.cpp文件中:
// your includes
namespace pessoa{
// your cpp code here ...
}