我有以下文件:
ListaEnc.hpp
#include "Elemento.hpp"
#include <cstdlib>
#include <iostream>
template<typename T>
class ListaEnc {
public:
ListaEnc();
~ListaEnc();
...
}
//Implementation:
template<typename T>
ListaEnc<T>::ListaEnc()
{
head = NULL;
size = 0;
}
template <class T>
ListaEnc<T>::~ListaEnc() {
}
main.cpp:
#include "ListaEnc.hpp"
using namespace std;
int main(int argc, char** argv)
{
ListaEnc<int>* teste = new ListaEnc<int>();
return 0;
}
Poligono.hpp
#ifndef POLIGONO_HPP
#define POLIGONO_HPP
#include "Ponto.hpp"
#include "ListaEnc.hpp"
#include <string>
using namespace std;
public:
//Construtores
Poligono(ListaEnc<Ponto> pontos, string nome);
Poligono(const Poligono& orig);
virtual ~Poligono();
//Metodos
string obterNome();
void adicionarPonto(Ponto);
ListaEnc<Ponto> obterPontos();
private:
ListaEnc<Ponto> pontos;
string nome;
};
#endif /* POLIGONO_HPP */
Poligono.cpp
#include "Poligono.hpp"
* Poligono::Poligono(ListaEnc<Ponto> pontos, string nome)
{
this->pontos = pontos;
this->nome = nome;
}
* Poligono::Poligono(const Poligono& orig) {
}
* Poligono::~Poligono() {
}
//Metodo
string Poligono::obterNome()
{
return this->nome;
}
ListaEnc<Ponto> Poligono::obterPontos()
{
return this->pontos;
}
void Poligono::adicionarPonto(Ponto p)
{
this->pontos.adiciona(p);
}
我在Poligono.cpp上收到以下编译错误:
/home/mariana/NetBeansProjects/TrabalhoCG/Poligono.cpp:12:对`ListaEnc ::〜ListaEnc()'的未定义引用
ListaEnc的析构函数为空,但已实现。有谁知道如何解决这个问题?
编辑:添加了ListaEnc的构造函数和析构函数的实现。该错误出现在我为Poligono.cpp添加的代码中,其中ListaEnc是参数之一。
Edit2:我向Poligono.cpp中出现错误的点添加了一个星号(第一个构造函数,第二个构造函数和析构函数)
最佳答案
由于您发布的代码显示
#ifndef POLIGONO_HPP
#define POLIGONO_HPP
在
Poligono.cpp
中,但是您在ListaEnc.hpp
中没有相同的字符,我假设您在该标头中缺少包含保护?根据
Poligono.cpp
中包含的其他代码,这可能导致两次定义模板ListaEnc
。在C ++标准下,如果您违反一个定义规则,则可能只会收到链接错误,而不会收到其他诊断消息。因此,也许要确保
ListaEnc.hpp
中包含防护措施?如果您发布更多代码,我将更新此答案:)
编辑:另一个建议,如果找不到
ListaEnc
的dtor定义时,您可以尝试将其实现移到类主体中?这使得错字不太可能导致它丢失。由于所有代码都在标头中,因此实际上不会改变任何其他内容。关于c++ - C++和Netbeans的未定义引用问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32302730/