我对C ++程序有未定义的引用,但不知道如何处理它

问题描述 投票:0回答:1

即使我检查了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;
}
c++ g++
1个回答
0
投票

您需要将代码封装在与标题相同的名称空间声明内的.cpp文件中:

// your includes


namespace pessoa{
    // your cpp code here ...
}
© www.soinside.com 2019 - 2024. All rights reserved.