从模板类调用函数时形成的无限循环,请任何人解释

Infinite loop formed while calling a function from a template class,Please anybody explain

本文关键字:无限循环 解释 任何人 调用 函数      更新时间:2023-10-16

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

#include <iostream>
#define MAX 100
using namespace std;
int z=10;
template <class T>class A
{
    public:
        A()
        {
            cout<<"A constructorn";
        }
        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 sortn" << endl;
    for(int i=0;i<z;i++)
    {
        cout<<"::insert the value at"<<i<<"th location::";
        cin >> arr[i];
    }
    cout<<"you have inserted thisn";
    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;
}

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

你有两个变量 z,一个是全局变量,另一个变量在类内。您只初始化全局的。在类内部,使用类变量,并且不初始化。这就是为什么它在全局方法时有效,但在类模板方法时不起作用的原因。

我所知,您似乎从未在class A中初始化z

尝试

template <class T>class A
{
  public:
  A(int z_):z(z_)
  {
    cout<<"A constructorn";
  }
  int z;
  T sort_rishi_fun(T arr[]);
};
// then in main()
A<int> a(z);