0

这是一个无法正常运行的代码,但如果我们将此函数用作独立的模板函数。

#include <iostream>
#define MAX 100
using namespace std;
int z=10;
template <class T>class A
{
    public:
        A()
        {

            cout<<"A constructor\n";
        }
        int z;
        T sort_rishi_fun(T arr[]);
};
template <class T>T A <T>::sort_rishi_fun( T arr[])
{
    for(int i=0;i<z;i++)
    {
        for(int j=0;j<z;j++)
        {
            if(arr[j+1]<arr[j])
            {
                T temp;
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}
int main()
{
    int z=10;
    int arr[100]; 
    cout << "\nEnter the number you wanted to be sort\n" << endl;
    for(int i=0;i<z;i++)
    {
        cout<<"::insert the value at"<<i<<"th location::";
        cin >> arr[i];
    }
    cout<<"you have inserted this\n";
    for(int i=0;i<=z;i++)
    {
        cout<<arr[i]<<endl;
    }
    A<int> a;
    a.sort_rishi_fun(arr)
        for(int i=0;i<=z;i++)
        {
            cout<<arr[i]<<endl;
        }
    return 0;
}

如果我们将此函数用作独立的模板函数,那么它将起作用。但它现在会创建一个无限循环。请解释任何人。

4

2 回答 2

2

您有两个变量 z,一个是全局变量,另一个在类中。您只初始化全局的。在类内部,使用了类变量,并且未初始化。这就是为什么当它是一个全局方法时它可以工作,但当它是一个类模板方法时它不起作用。

于 2012-06-22T07:05:27.187 回答
0

据我所知,您似乎从未zclass A.

尝试

template <class T>class A
{
  public:

  A(int z_):z(z_)
  {

    cout<<"A constructor\n";
  }
  int z;
  T sort_rishi_fun(T arr[]);
};

// then in main()
A<int> a(z);
于 2012-06-22T07:00:35.117 回答