繁体   English   中英

我对 C++ 程序有一个未定义的参考,但不知道如何处理它

[英]I have an undefined reference for C++ program and have no idea on how to treat it

即使我检查并发现 header 文件包含不存在差异,我仍然收到未定义的参考错误,Z099FB995346F31C749F6E40DB0F395EZ 文件中的 function 名称错误或.cpp 文件。 我还检查了天气,我的 function 电话那是错误的,但似乎都是正确的。 我以前从来没有处理过这种问题,我完全被难住了。 我想这可能是一大堆代码,所以如果你有任何提示让我自己处理它已经足够好了,只要你考虑到我以前的尝试。

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

header 文件是

#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;
}

您需要将代码包含在与 header 相同的命名空间声明中的 .cpp 文件中:

// your includes


namespace pessoa{
    // your cpp code here ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM