Referência indefinida para 'No::escreveId()'

Iniciado por duduulopes, 16 de Abril de 2016, 17:54

tópico anterior - próximo tópico

duduulopes

Boa tarde a todos, estou desde ontem tentando resolver esse problema e após muitas consultas em vão na internet estou abrindo esse tópico.

Sou iniciante com Linux e estou desenvolvendo um pequeno teste de programação para uma disciplina na graduação.
O problema é que não consigo compilar esse código em C++ via codeBlocks, me é apresentado o seguinte erro:

Referência indefinida para 'No::escreveId()'

Já conferi e estou usando o compilador g++, tentei realizar a linkagem manualmente pelo terminal e o mesmo erro é apresentado...

Segue meus arquivos fonte: (Lembrando que é apenas um teste de comunicação entre headers:

No.h
#ifndef NO_H
#define NO_H

#include <stdlib.h>
class No{
    int id; //id do nó

    public:
    No(int);
    void escreveId();
};
#endif // NO_H

no.cpp

#include "No.h"
#include <stdlib.h>
#include <iostream>

using namespace std;

No::No(int id){
    this->id=id;
}

void escreveId(){
    cout << "fuck";
}

main.cpp:

#include <iostream>
#include <stdlib.h>
#include <list>
#include "No.h"

using namespace std;

int main()
{
    int opcao,id1,id2;
    No *noAux;

    list<No> listNos;
    list<No> listAdj;
    list<No>::iterator it;
     
    cout << "Informe o nó que deseja inserir: ";
    cin >> id1;
    noAux=new No(id1);
    noAux->escreveId();
         
}

Darcamo

No arquivo no.cpp vc colocou

void escreveId(){
  cout << "fuck";
}


Ou seja, vc colocou a implementação de uma função escreveId e não do método escreveId da classe No. Por isso a referência indefinida. Mude para
void No::escreveId(){
  cout << "fuck";
}

que dá certo.