标题:问个问题:为什么生成不了lib文件
只看楼主
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
结帖率:100%
 问题点数:0 回复次数:0 
问个问题:为什么生成不了lib文件
我建立的是win32动态链接库工作。以前做其他类也是这样写法没出现什么问题,这回的不知为什么只生成了dll,没有生成lib.求高人解答。 代码有点长,但主要是标出的部分需要指正,其他部分应该不用管

这是头文件LinearArrH.h
#ifdef LINEAR_ARR
#else
#define LINEAR_ARR _declspec(dllimport)
#endif

#include<iostream>
#include<time.h>
const int MIN_SPAN=10;

template<typename T>
class LINEAR_ARR LinearArr

{
public:
    LinearArr();
    LinearArr(T h);
    LinearArr(T*h,int number);
    int GetSize();
    int GetCapacity();
    int Find(T element,int lo, int len);//从下标lo开始的len个元素中找到第一个指定元素并返回其秩,找不到时返回-1
    void CapacityExpand();
    void CapacityShrink();
    void Pushback(T added);
    void DeleteEnd();//只缩小size,并不释放空间
    T DeleteElement(int n);//删除秩为n的元素
    T GetFromIndex(int n);//返回秩为n的元素
    //此处以成员方式重置两个运算符
    T operator[](int n);//与GetFromIndex功能一样,但更为直观
    LinearArr operator=(LinearArr<T>&la1);
    //运算符重载完成
    int DeleteByValue(T element,int lo,int len);//从下标lo开始的len个元素中删除所有值为element的元素
    void Display();
    int ClearArr();
    void DeleteFixedLen(int beginner,int len);//删除从秩为beginner开始的len个元素
    void Sort(bool downward=false);//参数为真降序排列,为假升序排列
    bool IsSorted(bool direction=false);//参数为真检查是否降序,为假检查是否升序
    void Shuffle(int lo,int len);//从标lo开始的len个元素随机重排
    bool InsertAfter(T e,int n);//将新元素插入秩为n的元素之后,若n为-1则作为首元素插入
    bool InsertBefore(T e,int n);//将新元素插入秩为n的元素之前,若n为0则作为首元素插入
    void InsertInOrder(int lo,int hi,T element,bool downward=false);//从中分开,切分点归后一半
    void MassAppend(T*array,int len);//将一个数组追加到原线性表后面
    void MassAppend(LinearArr<T>la1);
    int Deduplicate(int lo,int len);//将从下标为lo开始的len个元素中删去重复元素。注:只在区间内检查是否重复
    friend LinearArr<T> operator+(const LinearArr<T>&la1,const LinearArr<T>&la2);
private:
    T*head;
    int size;
    int capacity;
};
template<typename T>
LinearArr<T> operator+( LinearArr<T>&la1, LinearArr<T>&la2);

下面是cpp
#define LINEAR_ARR _declspec(dllexport)
#include"LinearArrH.h"


template<typename T>LinearArr<T>::LinearArr()
{
    head=new T[capacity=MIN_SPAN];
    size=0;
}
template<typename T>LinearArr<T>::LinearArr(T h)
{
    head=new T[capacity=MIN_SPAN];head[0]=h;size=1;
}
template<typename T>LinearArr<T>::LinearArr(T*h,int number)
{
    head=new T[capacity=(number>MIN_SPAN?number*2:MIN_SPAN)];
    for(int i=0;i<number;i++)
        head[i]=h[i];
    size=number;
}
template<typename T>int LinearArr<T>::GetSize(){return size;}
template<typename T>int LinearArr<T>::GetCapacity(){return capacity;}
template<typename T>void LinearArr<T>::CapacityExpand()
{
    //cout<<"size:"<<size<<"; capacity:"<<capacity<<endl;
    if(size<<1<capacity) return;
    T*p=head;
    head=new T[capacity=capacity<<1];
    for(int i=0;i<size;i++)
        head[i]=p[i];
    delete p;
    //cout<<"capacity:"<<capacity<<endl;
}
template<typename T>void LinearArr<T>::CapacityShrink()
{
    if(size<<2>=capacity||capacity<=MIN_SPAN) return;
    T*oldArr=head;
    head=new T(capacity>>=1);
    for(int i=0;i<size;i++) head[i]=oldArr[i];
    delete oldArr;
}
template<typename T>void LinearArr<T>::Pushback(T added)
{
    if(capacity==size)
        CapacityExpand();
    head[size++]=added;
}
template<typename T>void LinearArr<T>::DeleteEnd()
{
    size--;//减少长度,其实并不释放存储空间
    CapacityShrink();//如果需要释放存储空间的话则释放
}
template<typename T>T LinearArr<T>::DeleteElement(int n)//删除秩为n的元素
{
    int deleted=head[n];
    for(int i=n;i<size;i++)
        head[i]=head[i+1];
    size--;
    CapacityShrink();
    return deleted;
}
template<typename T>T LinearArr<T>::GetFromIndex(int n){return (n>=0&&n<size)?head[n]:NULL;}
template<typename T>T LinearArr<T>::operator[](int n){return (n>=0&&n<size)?head[n]:NULL;}
template<typename T>LinearArr<T> LinearArr<T>::operator=(LinearArr<T>&la1)
{
    ClearArr();capacity=la1.GetCapacity();size=la1.GetSize();
    for(int i=0;i<size;i++) head[i]=la1.GetFromIndex(i);
    return *this;//给个返回值可支持连续赋值
}
template<typename T>void LinearArr<T>::Display()
{
    for(int i=0;i<size;i++)
        cout<<head[i]<<" ";
}
template<typename T>int LinearArr<T>::ClearArr()
{
    int oldSize=size;
    delete head;head=new T[MIN_SPAN];//勿忘重新分配空间,否则无法添加新元素。
    size=0;capacity=MIN_SPAN;
    return oldSize;
}
template<typename T>void LinearArr<T>::DeleteFixedLen(int beginner,int len)//删除从秩为beginner开始的len个元素
{
    if(beginner+len>=size) size=beginner+1;
    else
    {
        for(int i=beginner+len;i<size;i++)
            head[beginner++]=head[i];
        size-=len;
    }
    CapacityShrink();
}
template<typename T>int LinearArr<T>::DeleteByValue(T element,int lo,int len)
{
    if(lo<0||lo>size-1) return 0;
    if(lo+len>size) len=size-lo;
    int oldSize=size;
    for(int i=lo;i<lo+len;i++)
        if(head[i]==element)
        {
            DeleteElement(i);len--;
        }
    return oldSize-size;
}
template<typename T>void LinearArr<T>::Sort(bool downward)//参数为真降序排列,为假升序排列
{
    int idx;T temp;int scope=size;
    if(downward)//降序排列
    {
        while(--scope)
        {
            for(idx=0;idx<scope;idx++)
            {
                if(head[idx]<head[idx+1])
                {
                    temp=head[idx];head[idx]=head[idx+1];head[idx+1]=temp;
                }
            }
        }
    }
    else//升序排列
    {
        while(--scope)
        {
            for(idx=0;idx<scope;idx++)
            {
                if(head[idx]>head[idx+1])
                {
                    temp=head[idx];head[idx]=head[idx+1];head[idx+1]=temp;
                }
            }
        }
    }
}
template<typename T>bool LinearArr<T>::IsSorted(bool direction)//参数为真检查是否降序,为假检查是否升序
{
    int i;
    if(direction)
    {
        for(i=0;i<size-1;i++)
        {
            if(head[i]<head[i+1])
                return false;
        }
        return true;
    }
    else
    {
        for(i=0;i<size-1;i++)
        {
            if(head[i]>head[i+1])
                return false;
        }
        return true;
    }
}
template<typename T>void LinearArr<T>::Shuffle(int lo,int len)
{
    if(size<=1||lo+len>size) return;
    srand((unsigned int)time(0));
    int rd;T tmp;
    for(int i=lo;i<lo+len;i++)
    {
        rd=lo+rand()%len;
        tmp=head[i];head[i]=head[rd];head[rd]=tmp;
    }
}
template<typename T>bool LinearArr<T>::InsertAfter(T e,int n)//将新元素插入秩为n的元素之后,若n为-1则作为首元素插入
{
    if(n>=size||n<-1) return false;
    if(size==capacity) CapacityExpand();
    for(int i=size++;i>n;i--)
        head[i+1]=head[i];
    head[n+1]=e;
    return true;
}
template<typename T>bool LinearArr<T>::InsertBefore(T e,int n)//将新元素插入秩为n的元素之前,若n为0则作为首元素插入
{
    if(n>=size||n<0) return false;
    if(size==capacity) CapacityExpand();
    for(int i=size++;i>=n;i--)
        head[i+1]=head[i];
    head[n]=e;
    return true;
}
template<typename T>void LinearArr<T>::InsertInOrder(int lo,int hi,T element,bool downward)//从中分开,切分点归后一半
{
    if(lo==hi)
    {
        if(size++==capacity) CapacityExpand();
        int i;
        if(downward==(element>=head[lo]))
        {
            for(i=size-1;i>=lo;i--)
                head[i+1]=head[i];
            head[lo]=element;
        }
        else
        {
            for(i=size-1;i>=lo+1;i--)
                head[i+1]=head[i];
            head[lo+1]=element;
        }
        return;
    }
    if(downward)
    {
        if(element>head[(lo+hi)>>1])
        {
            InsertInOrder(lo,(lo+hi)>>1,element,downward);
        }
        else
        {
            InsertInOrder(((lo+hi)>>1)+1,hi,element,downward);
        }
    }
    else
    {
        if(element<head[(lo+hi)>>1])
        {
            InsertInOrder(lo,(lo+hi)>>1,element,downward);
        }
        else
        {
            InsertInOrder(((lo+hi)>>1)+1,hi,element,downward);//要加括号,因为加号优先级高于位右移
        }
    }
}
template<typename T>void LinearArr<T>::MassAppend(T*array,int len)
{
    if(size+len>capacity) CapacityExpand();
    for(int i=0;i<len;i++)
        head[size++]=array[i];
}
template<typename T>void LinearArr<T>::MassAppend(LinearArr<T>la1)
{
    if(size+la1.GetSize()>capacity) CapacityExpand();
    for(int i=0;i<la1.GetSize();i++)
        head[size++]=la1.GetFromIndex(i);
}
template<typename T>int LinearArr<T>::Find(T element,int lo,int len)
{
    while(len--)
        if(head[lo++]==element) return lo-1;
    return -1;
}
template<typename T>int LinearArr<T>::Deduplicate(int lo,int len)
{
    if(len<=1) return 0;
    if(lo+len>size) len=size-lo;//长度不允许超出表尾
    int oldSize=size;//记录原来的元素个数,用于计算被删除的元素个数并返回
    int hi=lo+len;//求指定区间末元素的下一元素的下标。注:不是末尾自身的下标!
    for(int i=lo+1;i<hi;)
    {
        if(Find(head[i],lo,i-lo)==-1) i++;
        else
        {
            DeleteElement(i);hi--;
        }
    }
    return oldSize-size;
}
template<typename T>LinearArr<T> operator+( LinearArr<T>&la1, LinearArr<T>&la2)
{
    LinearArr<T> la3;
    if(la1.GetSize()+la2.GetSize()>MIN_SPAN) la3.CapacityExpand();
    for(int i=0;i<la1.GetSize();i++) la3.Pushback(la1.GetFromIndex(i));
    for(i=0;i<la2.GetSize();i++) la3.Pushback(la2.GetFromIndex(i));
    return la3;
}
搜索更多相关主题的帖子: include public 动态 
2017-02-01 21:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-473932-1-1.html




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

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