QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1173|回复: 4

小弟刚学C++,有个问题请教一下。。

[复制链接]
发表于 2005-12-28 09:05:21 | 显示全部楼层 |阅读模式


//A.h
class A
{
   virtual AA();
   virtual BB();
}

//B.h
template <class T>
class B : public A
{
    B();
   ~B();
    virtual AA();
    virtual BB();
}

//B.cpp

template <class T>
B<T>::B()
{
}

template <class T>
B<T>::~B()
{
}

........

//main.cpp

int main()
{
   B<int> * b = new B<int>();
}

这个为生么总是编译不过去?????
发表于 2005-12-28 12:01:00 | 显示全部楼层
声明class的时候右花括号后要有个分号
还有在class的定义文件(.cpp文件)里要include相对应的头文件
回复

使用道具 举报

 楼主| 发表于 2005-12-29 09:02:34 | 显示全部楼层
我还是把源码铁出来。

//Zobject.h
#ifndef ZOBJECT_H
#define ZOBJECT_H
#include<iostream>
using namespace std;

class Zobject
{
    public:
     Zobject();
    ~Zobject();
    virtual bool IsNull();
    virtual unsigned int Length();
    virtual Zobject * Clone();

};

#endif


//Zobject.cpp
#include "zobject.h"

Zobject::Zobject()
{}


Zobject::~Zobject()
{}

bool Zobject::IsNull()
{
    return true;
}

unsigned int Zobject::Length()
{
    return 0;
}

Zobject * Zobject::Clone()
{
    return NULL;
}

//Zlist.h

#ifndef ZLIST_H
#define ZLIST_H

#include "Zobject.h"
#include "Node.h"
template <class T>
class Zlist : public Zobject
{
    public:
        Zlist();
        ~Zlist();
        virtual bool IsNull();
        virtual unsigned int Length();
        virtual Zobject * Clone();
        virtual void InsertHead(T * node);
        virtual void InsertEnd(T * node);
        virtual T * Rmove(unsigned int index);
        virtual unsigned int Search(T * data);
    private:
        Node<T> * m_head,* m_end, * m_currect;
        unsigned int m_num;
    protected:
        void p_sethead(Node<T> * head);
        void p_setend(Node<T> * end);
        void p_setnum(unsigned int n);
        
        
};

#endif

//Zlist.cpp
#include "Zlist.h"

template <class T>
Zlist<T>::Zlist()
: Zobject()
{
    this->m_head = new Node<T>();
    this->m_end = this->m_head;
    this->m_num = 0;
}

template <class T>
Zlist<T>::~Zlist()
{
}

template <class T>
        bool Zlist<T>::IsNull()
{
    if(m_head == NULL)
        return true;
    return false;
}

template <class T>
        unsigned int Zlist<T>::Length()
{
    return m_num;
}

template <class T>
        Zobject * Zlist<T>::Clone()
{
    Zlist<T> * tmp = new Zlist<T>();
    tmp->p_setend(m_end);
    tmp->p_sethead(m_head);
    tmp->p_setnum(m_num);
    return tmp;
}

template <class T>
        void Zlist<T>::InsertEnd(T * node)
{
    Node<T> * tmp = new Node<T>();
    tmp->SetData(node);
    this->m_end->GetNext()->SetNext(tmp);
    tmp->SetPrev(this->m_end);
   
   
}

template <class T>
        void Zlist<T>::InsertHead(T * node)
{
    Node<T> * tmp = new Node<T>();
    tmp->SetData(node);
    this->m_head->GetNext()->SetPrev(tmp);
    tmp->SetNext(this->m_head->GetNext());
    tmp->SetPrev(this->m_head);
    this->m_head->SetNext(tmp);  
    this->m_num ++;
}

template <class T>
        T * Zlist<T>::Rmove(unsigned int index)
{
    T * tmp;
    if(this->m_num < index)
        return NULL;
    this->m_currect = this->m_head->GetNext();
    for(int i=0;i<index;i++)
        this->m_currect = this->m_currect->GetNext();
    this->m_currect->GetPrev()->SetNext(this->m_currect->GetNext());
    this->m_currect->GetNext()->SetPrev(this->m_currect->GetPrev());
    this->m_num --;
    tmp = m_currect->GetData();
    m_currect->SetData(NULL);
    delete m_currect;
    return tmp;
   
}


template <class T>
        unsigned int Zlist<T>::Search(T * data)
{
   
}


//main.cpp


#include "Zlist.h"
#include "Node.h"
int main(int argc, char *argv[])
{
   Zlist<int> * t;
   t = new Zlist<int>();
   getchar();
   return 0;
}


****************编译结果***************************
Error:Zlib.o(.text+0x75):Zlib.cpp:undefined reference to 'Zlist<int>::Zlist()'
回复

使用道具 举报

发表于 2005-12-29 14:39:10 | 显示全部楼层

把实现和声明都放在文件中

只有被实际使用到的类模板或函数模板编译器才会生成其代码。所以,编译模板的实现时,没有指定模板参数,编译器不会生成你所期望的类和函数。
回复

使用道具 举报

 楼主| 发表于 2005-12-30 10:05:11 | 显示全部楼层

谢谢了

谢谢了

    你的意思是将函数的实现和类声明放在一起??
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 00:30 , Processed in 0.043720 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表