标题:谁知道在c++中怎么在模板中使用静态变量啊?
取消只看楼主
玉琪龙
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-9
 问题点数:0 回复次数:6 
谁知道在c++中怎么在模板中使用静态变量啊?
在学到c++模板时,忽然想到静态变量,于是试一下,但是出不了结果,不知道使用时有什么规则?请哪位高手指教一下!!
谢谢~~~~~
搜索更多相关主题的帖子: 十分感激 
2007-12-09 11:55
玉琪龙
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-9
得分:0 
具体点吧!大家看看这是怎么错的?
#include<iostream.h>
template <class T>
class Fun
{int l;T *p;
static T sum;
public:
Fun(int i=1)
{ l=i;
p=new T[i];
}
void input();
void output();
void sort();
void look(T);
 void add()
 {
    for(int i=0;i<l;i++)
       sum+=p[i];

 }
 ~Fun(){delete [] p;}
};
T static::sum=0;
4template <class T>
void Fun<T>::input()
{ for(int i=0;i<l;i++)
{ cout<<"请输入第"<<i+1<<"个数据:";
    cin>>p[i];
}
}
template <class T>
void Fun<T>::output()
{for(int i=0;i<l;i++)
  cout<<p[i]<<' ';
}
template <class T>
void Fun<T>::sort()
{T tem;
 for(int i=0;i<l-1;i++)
  for(int j=i+1;j<l;j++)
      if(p[i]>p[j])
      {tem=p[i];
       p[i]=p[j];
       p[j]=tem;
      }
}
template <class T>
void Fun<T>::look(T key)
{for(int i=0;i<l;i++)
  if(p[i]!=key)continue;
  else cout<<"您要的数据在第"<<i+1<<"个";
cout<<"抱歉~您要的数据没有查询到!请从新输入:";
}
void main()
{Fun<int> s(4);int key;
 cout<<"请输入数据:";
 cout<<endl;
 s.input();cout<<endl;
 cout<<"确认您的数据为:";
 s.output();cout<<endl;
 cout<<"对您的数据排序后结果:";
 s.sort();
 s.output();cout<<endl;
 cout<<"请输入您要查询的数据:";
 cin>>key;
 s.look(key);
}
谢谢啊很多 麻烦大家啦

龙的图腾
2007-12-10 22:21
玉琪龙
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-9
得分:0 
谢谢楼上的朋友啊!我上面的程序写的有点问题~~~不好意思
#include<iostream.h>
template <class T>
class Fun
{int l;T *p;
static T sum;
public:
Fun(int i=1)
{ l=i;
p=new T[i];
}
void input();
void output();
void sort();
void look(T);
 void add()
 {
    for(int i=0;i<l;i++)
       sum+=p[i];

 }
 ~Fun(){delete [] p;}
};
T  Fun::sum=0;
template <class T>
void Fun<T>::input()
{ for(int i=0;i<l;i++)
{ cout<<"请输入第"<<i+1<<"个数据:";
    cin>>p[i];
}
}
template <class T>
void Fun<T>::output()
{for(int i=0;i<l;i++)
  cout<<p[i]<<' ';
}
template <class T>
void Fun<T>::sort()
{T tem;
 for(int i=0;i<l-1;i++)
  for(int j=i+1;j<l;j++)
      if(p[i]>p[j])
      {tem=p[i];
       p[i]=p[j];
       p[j]=tem;
      }
}
template <class T>
void Fun<T>::look(T key)
{int k=-1;
    for(int i=0;i<l;i++)
    if(p[i]==key) k=i;
    if(k!=-1) cout<<"您要的数据在第"<<k+1<<"个";
    else cout<<"抱歉~您要的数据没有查询到!请从新输入:";
}
void main()
{Fun<int> s(4);int key;
 cout<<"请输入数据:";
 cout<<endl;
 s.input();cout<<endl;
 cout<<"确认您的数据为:";
 s.output();cout<<endl;
 cout<<"对您的数据排序后结果:";
 s.sort();
 s.output();cout<<endl;
 cout<<"请输入您要查询的数据:";
 cin>>key;
 s.look(key);
}
请高手们在看看啊!~~~多谢啊

龙的图腾
2007-12-12 12:53
玉琪龙
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-9
得分:0 
谢谢这位仁兄啊 ~~~~·终于解决了!
还是现代人思维活跃啊 ~~~~我问老师,他们都说没见过!
呵呵呵…………

龙的图腾
2007-12-13 21:23
玉琪龙
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-9
得分:0 
请再指教一下啊~~~~~
那你怎么在你上面写的程序中,怎么在主函数中用那个静态变量呢?
#include <iostream>
using namespace std;

template<class T>
class A{
public:
    A(T n):v2(n){}
    static T v1;
    const T v2;
    static const T v3;
};

template<class T>
T A<T>::v1=1;
template<class T>
T A<T>::v3=1;
int main(){
    A<int> a(10);
    cout<<"v2="<<a.v2<<endl;
    cout<<"v3="<<A::v3;//这个v3怎么用啊?
  printf("%d",sizeof(A<int>));
    getchar();
}

龙的图腾
2007-12-13 22:49
玉琪龙
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-9
得分:0 
先谢谢这位仁兄啊!
首先,七楼的那个程序是复制你的,我只是简单的改动一下,在机子上运行是没有错误的。
另外,“static const必须在声明的时候就初始化”我不知对不对,但是,我在c++6.0
运行时老是编译错误~~但是,改成“template<class T>
T A<T>::v3=1;
”之后就能通过编译!并且结果正确。
最后十分感谢您啊~~~就剩一个问题了,就是上面的那一个"static const"问题。

龙的图腾
2007-12-14 13:10
玉琪龙
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-9
得分:0 
谢谢楼上的朋友啊!
我懂了,也请大家支持哦

龙的图腾
2007-12-14 15:05



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




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

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