我有以下文件:
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的析构函数为空,但已实现。有人知道怎么解决这个问题吗?
Edit:增加ListaEnc的构造函数和析构函数的实现。错误出现在我为Poligono.cpp添加的代码位中,其中ListaEnc是参数之一。
Edit2:我在Poligono.cpp中出现错误的地方添加了星号(第一个构造函数,第二个构造函数和析构函数)
既然你发布了显示
的代码#ifndef POLIGONO_HPP
#define POLIGONO_HPP
在Poligono.cpp
,但你没有相同的ListaEnc.hpp
,我假设你缺少包括警卫在该标题?
根据Poligono.cpp
中包含的其他代码,这可能导致模板ListaEnc
定义两次。在c++标准下,如果你违反了一个定义规则,你可能只会得到一个链接错误,而没有其他诊断信息。
那么,也许要确保ListaEnc.hpp
中有include守卫?
如果你发布更多的代码,我会更新这个答案:)
编辑:另一个建议,如果找到ListaEnc
的医生定义有困难,你可以尝试将它的实现移动到类体内?这样就不太可能因为打字错误而导致它丢失。由于所有的代码都在标题中,这实际上不会改变任何其他内容。