错误:对...的未定义引用是什么问题?

时间:2019-05-27 05:10:28

标签: c++ class header g++

尝试编译代码时出现未定义的引用错误。我只是为了测试Grafo类的功能

grafo.h:

#ifndef GRAFO_H
#define GRAFO_H

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>


/*  Classe Grafo - Matriz de adjecencia  */
class Grafo
{
    public:
        //  Atributos
        int num_vertices;
        int *vertices; 
        int **arestas;
        char tipo;

        //  assinaturas dos metodos
        Grafo(int nv,char t);
        void printGrafo();

};
#endif

grafo.cpp

#include "grafo.h"

Grafo::Grafo(int nv,char t);  
Grafo::void printGrafo();

Grafo::Grafo(int nv,char t){
    num_vertices = nv;
    vertices = new int[num_vertices];
    tipo = t;

    //criar matriz
    arestas = new int *[num_vertices];
    for(int i = 0; i < num_vertices;i++){ arestas[i] = new int[num_vertices];}

    // inicializar valores da matriz
    for(int i = 0; i < num_vertices;i++){
        vertices[i] = 0;
        for(int j = 0; j < num_vertices;j++){
            arestas[i][j] = 0;
        }
    }

}

void Grafo::printGrafo(){
    std::cout << " | ";
    for(int i = 0; i < num_vertices;i++){
        std::cout << i << " ";
    }
    std::cout << std::endl;
        for(int i = -3; i < num_vertices;i++){
        std::cout << "_";
    }
    std::cout << std::endl;
    for(int i = 0; i < num_vertices;i++){
        std::cout << i << " | ";
        for(int j = 0; j < num_vertices;j++){
            std::cout << arestas[i][j] << " ";
        }
        std::cout << std::endl;
    }
}

main.cpp

#include "grafo.h"

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>

int main(){
  Grafo G = Grafo(5,'D');
  G.printGrafo();
}

当我尝试使用命令g ++ main.cpp -o main.exe进行编译时。我收到以下错误消息:

  

/tmp/ccPxPLjS.o:在函数main': main.cpp:(.text+0x29): undefined reference to中的Grafo :: Grafo(int,char)'main.cpp :(。text + 0x35):   未定义对Grafo :: printGrafo()的引用collect2:错误:ld   返回了1个退出状态

有人可以帮我完成这项工作吗? >。<< / p>

1 个答案:

答案 0 :(得分:1)

首先从Grafo.cpp文件中删除第一行:

Grafo::Grafo(int nv,char t);  
Grafo::void printGrafo();

这些正在导致编译错误(GCC):

grafo.cpp:3:27: error: declaration of 'Grafo::Grafo(int, char)' outside of class is not definition [-fpermissive]
 Grafo::Grafo(int nv,char t);
                           ^
grafo.cpp:4:8: error: expected unqualified-id before 'void'
 Grafo::void printGrafo();
        ^~~~

然后将所有源文件包含到编译调用中

g++ -o test test.cpp grafo.cpp

如果这样做的话,这将导致源代码正确编译:

g++ -o test test.cpp

它会引起您所描述问题中的类似错误:

ccVmPgnr.o:test.cpp:(.text+0x20): undefined reference to `Grafo::Grafo(int, char)'
ccVmPgnr.o:test.cpp:(.text+0x2c): undefined reference to `Grafo::printGrafo()'