尝试编译代码时出现未定义的引用错误。我只是为了测试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>
答案 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()'