我有以下文件:
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()&#39;
的未定义引用
ListaEnc的析构函数为空,但已实现。有谁知道如何解决这个问题?
编辑:为ListaEnc添加了构造函数和析构函数的实现。错误出现在我为Poligono.cpp添加的代码中,其中ListaEnc是其中一个参数。
Edit2:我在Poligono.cpp中出现错误的地方添加了一个星号(第一个构造函数,第二个构造函数和析构函数)
答案 0 :(得分:1)
由于您发布了显示
的代码#ifndef POLIGONO_HPP
#define POLIGONO_HPP
Poligono.cpp
中的,但是ListaEnc.hpp
中你没有相同的内容,我认为你错过了那个标题中包含的守卫?
根据Poligono.cpp
中包含的其他代码,这可能会导致模板ListaEnc
的定义两次。在C ++标准下,如果您破坏一个定义规则,您可能只会收到链接错误而没有其他诊断消息。
那么,也许确保ListaEnc.hpp
中包含警卫?
如果您发布更多代码,我会更新此答案:)
编辑:另一个建议,如果找不到ListaEnc
的dtor定义,你可能会尝试将它的实现移到类体中吗?这使得打字错误不太可能导致它丢失。由于所有代码都在标题中,否则这实际上不会改变任何内容。