| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 498 人关注过本帖
标题:求助 :写的数组类使用时无法访问 大家帮我看看
只看楼主 加入收藏
oicq
Rank: 1
等 级:新手上路
帖 子:34
专家分:1
注 册:2010-9-22
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:6 
求助 :写的数组类使用时无法访问 大家帮我看看
一共三个文件 :
Array.h
Array.cpp
main.cpp
程序代码:
这个是Array.h文件中的内容

#ifndef  ARRAY_H_H
#define  ARRAY_H_H
enum Erro
{
    IndexOutOf,
    InviladArraySize,
    MemoryAllocationErro
};

template<class T>
class Array
{
public:
    Array(int size=20);
    Array(Array<T>& _array);
    ~Array();
    T& operator [](int i);
    operator T*();
    void ReSize(int sz);
    int GetLength();
private:
    void     PrintErro(Erro erro);
   
    int size;
    T* data;
};
#endif 
这个是Array.cpp文件中的内容

#include "Array.h"
#include <iostream.h>
#include "stdlib.h"
#define NULL 0
char* ErroInfo[]={"下标出界","数组大小不正确","申请内存失败"};
template <class T>
Array<T>::Array(int size1)
{
    if(size1<0)
    {
        PrintErro(InviladArraySize);
    }
    size=size1;
    data=new T[size1];
    if(NULL==data)
    {
        PrintErro(MemoryAllocationErro);
        exit(1);
    }
}
template <class T>
Array<T>::Array(Array<T>& A_rray) 
{
    size= A_rray.size;
    data=new T[size];
    if(NULL==data)
    {   
        PrintErro(MemoryAllocationErro);
        exit(1);
    }
    else
    {
        for(int i=0;i<size;i++)
        {
            data[size]=A_rray.data[size];
        }
    }

}

template <class T>
T& Array<T>:: operator [](int i)  
{
    if(i>size || i<0)
    {
        PrintErro(IndexOutOf);
        exit(1);
    }
    return data[i];
}
template <class T>
Array<T>::operator T*()           
{
    return data;
}
template <class T>
int Array<T>::GetLength()      
{
    cout<<"元素个数 : "<<size<<endl;
    return size;
}
template <class T>
void  Array<T>::ReSize(int sz)
{   
    if(sz<NULL)   
    {
        PrintErro(MemoryAllocationErro);
        exit(1);
    }
    else if(sz<size)
    {
        size=sz;
        T* newdata=new T[sz];
        if(NULL==newdata)
        {
            PrintErro(MemoryAllocationErro);       
            exit(1);
        }
        T* pb=data;
        T* pn=newdata;
        while(sz--)
        {
            *pb++=*pn++;
        }
        delete []data;
        data=newdata;
    }
    else if(sz>size)
    {
        size=sz;
        int count=size;
        T* newdata=new T[sz];
        if(NULL==newdata)
        {
            exit(1);
        }
        T* pb=data;
        T* pn=newdata;
        while(count--)
        {
            *pb++=*pn++;
        }
        delete []data;
        data=newdata;   
    }
}
template <class T>
void Array<T>::PrintErro(Erro erro) 
{
    cout<<ErroInfo[erro]<<endl;
}

template <class T>
Array<T>::~Array()   
{
    delete []data;
}
这个是主程序文件main.cpp文件中的内容

#include "Array.h"
#include <iostream.h>
void main()
{

    Array<int> hello(1);
    hello[0]=10;
    hello[1]=20;
    cout<<"hello [0] "<<hello[0]<<endl;
    cout<<"hello [1] "<<hello[1]<<endl;

}

这个是错误 


--------------------Configuration: 11 - Win32 Debug--------------------
Compiling...
main.cpp
Linking...
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Array<int>::~Array<int>(void)" (??1?$Array@H@@QAE@XZ)
main.obj : error LNK2001: unresolved external symbol "public: int & __thiscall Array<int>::operator[](int)" (??A?$Array@H@@QAEAAHH@Z)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Array<int>::Array<int>(int)" (??0?$Array@H@@QAE@H@Z)
Debug/11.exe : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.

11.exe - 4 error(s), 0 warning(s)





搜索更多相关主题的帖子: 访问 
2010-11-22 14:01
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:5 
呵呵  这个问题我在模板重用的时候也遇到过    把你要用的函数变成内联就行了   具体为什么我也不知道   反正不是内联它不认...........

                                         
===========深入<----------------->浅出============
2010-11-22 15:09
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
Array.h文件的结尾处补上,#include"Array.cpp"

迭代的是人,递归的是神。
2010-11-22 15:14
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:15 
模板的分离编译问题,现在大多数编译器还不支持分离编译,你可以将array.cpp包含在array.h文件中,在头文件中只声明类不定义,或者在array.cpp中实例化一个具体的类比如你用到类模板的int类型,就在array.cpp中写着一句话,template class array<int>;不过这样写对于使用到的其他类型是没用的,要用到其他类型每一个类型都要实例化。还有一个关键字export将类模板或模板函数导出,但要看编译器是否支持了。 另外全局变量char *errorinfo[]就不能写在array.cpp中,会引起重定义的。

离恨恰如春草,更行更远还生。
2010-11-22 15:33
oicq
Rank: 1
等 级:新手上路
帖 子:34
专家分:1
注 册:2010-9-22
收藏
得分:0 
回复 4楼 玩出来的代码
非常感谢 很详细

                                                                  D.神罗天征
2010-11-22 16:01
oicq
Rank: 1
等 级:新手上路
帖 子:34
专家分:1
注 册:2010-9-22
收藏
得分:0 
回复 2楼 laoyang103
3 Q

                                                                  D.神罗天征
2010-11-22 16:01
oicq
Rank: 1
等 级:新手上路
帖 子:34
专家分:1
注 册:2010-9-22
收藏
得分:0 
回复 3楼 lintaoyn
include" XXX.cpp" 我都没见过

                                                                  D.神罗天征
2010-11-22 16:03
快速回复:求助 :写的数组类使用时无法访问 大家帮我看看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018690 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved