2011-11-09 53 views
-5

這是我定義我的模板和3個附加類我的模板不工作(C++) - 我做錯了什麼?

#ifndef PLANILHAH 
#define PLANILHAH 

#include <iostream> 
#include "planilha_func.h" 

template <class TIPO> class planilha { 
    friend class celula; 
    friend class listaT; 
    friend class elo; 
    protected: 
    celula * primeiro; 
    unsigned int count; 
    public: 
    planilha(); 
    planilha(const planilha<TIPO>& origem); 
    ~planilha(void) 
    TIPO obtem_valor(const unsigned int num_cel); 
    //many more methods 
}; 

我不知道我是否應該使這個在「planilha」與否,如果我讓嵌套在一個嵌套類,如何實現它?它需要收到類型「TIPO」

template <class TIPO> class celula{ 
    friend class listaT; 
    friend class elo; 
    protected: 
    unsigned int idCelula; 
    TIPO constante; 
    TIPO total; 
    listaT termos; 
    //etc 
    void insere(int novoCons); 
    void apaga(); 
    void setIdCelula(unsigned int idCelula); 
    void setTotal(TIPO total); 
    TIPO getTotal() const; 
    TIPO getConstante() const; 
    void setConstante(TIPO constante); 

}; 

我不知道友元類是最好的選擇,這是在類celula使用

class listaT { 
    friend class elo; 
    protected: 
    elo * primeiro; 
    public: 
    listaT(); 
    ~listaT(); 
    listaT(listaT& origem); 
}; 

class elo { 
    friend class listaT; 
    protected: 
    elo(); 
    elo(unsigned int novaRef, double novoFator, bool x = true, elo * proxElo = NULL); 
    elo operator=(const elo& origem); 
}; 

#endif; 

繼承人在那裏我實現它們,我得到100錯誤或更多。我無法理解爲什麼

#include "planilha.h" 
#include <iostream> 
#include <cstdlib> 
#include <fstream> 

using namespace std; 

template <class TIPO> 
planilha<TIPO>::planilha() { 
    primeiro = NULL; 
    count = 1; 
} 

template <class TIPO> 
planilha<TIPO>::~planilha(void) { 
    celula * p = primeiro; 
    while(primeiro!=NULL) { 
     p=primeiro->prox; 
     delete primeiro 
     primeiro=p; 
    } 
} 

template <class TIPO> 
planilha<TIPO>::planilha(const planilha<TIPO>& origem) { 
    this->count = origem.count; 
    celula * p1; 
    this->primeiro = NULL; 
    celula * p2; 
    for(p2 = origem.primeiro; p2!=NULL; p2=p2->prox) { 
     p1 = p2; 
     if(this->primeiro == NULL) { 
      this->primeiro = p1; 
     } 
     p1 = p1->prox; 
    } 
} 


template <class TIPO> 
unsigned int planilha<TIPO>::getCount() const { 
    return count; 
} 

template <class TIPO> 
void typename planilha<TIPO>::setCount(unsigned int count) { 
    this->count = count; 
} 

template <class TIPO> 
celula * planilha<TIPO>::finder(unsigned int id) { 
    celula * resposta; 
    for(resposta=this->primeiro; resposta!=NULL; resposta=resposta->prox) { 
     if(resposta->idCelula == id) break; 
    } 
    return resposta; 
} 

template <class TIPO> 
celula<TIPO>::celula() { 
    prox = NULL; 
} 

template <class TIPO> 
celula<TIPO>::celula(unsigned int novoId, TIPO novaConstante, planilha<TIPO> * proxCel) { 
    idCelula = novoId; 
    constante = novaConstante; 
    total = novaConstante; 
    prox = proxCel; 
} 



template <class TIPO> 
void celula<TIPO>::setTotal(TIPO total) { 
    this->total = total; 
} 


listaT::listaT() { 
    this->primeiro = NULL; 
} 

listaT::~listaT() { 
    elo * p = primeiro; 
    while(primeiro!=NULL) { 
     p=primeiro->prox; 
     delete primeiro; 
     primeiro=p; 
    } 
} 

listaT::listaT(listaT& origem) { 
    elo * p2; 
    elo * p1; 
    primeiro = NULL; 
    for(p2 = origem.primeiro; p2!=NULL; p2 = p2->prox) { 
     p1 = p2; 
     if(primeiro == NULL) { 
      primeiro = p1; 
     } 
     p1 = p1->prox; 
    } 
} 

bool listaT::vazia() { 
    return (primeiro == NULL); 
} 

void listaT::insere(int novaRef, double novoFator, bool absoluta) { 
    elo * p = primeiro; 
    elo * novoElo = new elo(novaRef, novoFator, absoluta); 
    if(vazia()) { 
     primeiro = novoElo; 
    } else { 
     while(p->prox!=NULL) { 
      p = p->prox; 
     } 
     p->prox = novoElo; 
    } 
} 

bool listaT::operator==(const listaT &listaT2) { 
    elo * p1 = this->primeiro; 
    elo * p2 = listaT2.primeiro; 
    bool resposta = true; 
    while(p1!=NULL && p2!=NULL) { 
     if(p1->fator != p2->fator || p1->referencia != p2->referencia || p1->absolut != p2->absolut) { 
      resposta = false; 
     } 
     p1=p1->prox; 
     p2=p2->prox; 
    } 
    if(p2!=NULL || p1!=NULL) { 
     resposta = false; 
    } 
    return resposta; 
} 

elo * listaT::getPrimeiro() { 
    elo * resposta; 
    resposta = primeiro; 
    return resposta; 
} 

elo::elo() { 
    prox = NULL; 
} 

elo::elo(unsigned int novaRef, double novoFator, bool x, elo * proxElo) { 
    referencia = novaRef; 
    fator = novoFator; 
    prox = proxElo; 
    absolut = x; 
} 

elo elo::operator=(const elo& origem) { 
    unsigned int r = origem->referencia; 
    double f = origem.fator; 
    bool x = origem.absolut; 
    elo p(r, f, x); 
    return p; 
} 
+1

有一個數十億的這個問題。 – Puppy

+2

請將您的代碼簡化爲可能出現問題的**最簡單**。 –

+0

閱讀編譯器抱怨什麼,並修復每個錯誤和警告。最後,你的程序將被編譯。 btw有什麼錯誤? –

回答

1

你有一個包括了cpp文件,並有你確信,如果你不,你需要把模板類的源代碼在同一個文件頭

+0

我的老師告訴我使用定義創建一個文件,另一個使用方法 –

+0

我只有兩個.h文件和一個main.cpp,通常包括這兩個標頭 –

+2

,您需要將源文件放在與類模板頭相同的文件中 – sehe

相關問題