关于c++类模板及连接问题解决方法

这个是鄙人发表一篇论坛,刚结帖,由于没有回复次数,导致没写结贴总结,在这写下结贴总结,也希望以后也出现此问题的朋友们知道怎么处理:

论坛链接:http://bbs.csdn.net/topics/392016457#new_post

总结:

1、通过一楼的提示,我百度了一下,看到这篇博客后,知道所以然了:https://zm12.sm-tc.cn/?src=http%3A%2F%2Fwww.cnblogs.com%2FBraveliu%2Fp%2F3442990.html&uid=6946bd3494759db0b7aa5ee0aad2360e&hid=c7f095e433184398ae273b371c5809fc&pos=2&cid=9&time=1473385130497&from=click&restype=1&pagetype=0000004000000402&bu=web&query=%E7%B1%BB%E6%A8%A1%E6%9D%BF%E7%9A%84%E5%A3%B0%E6%98%8E%E4%B8%8E%E5%AE%9A%E4%B9%89&mode=&uc_param_str=dnntnwvepffrgibijbprsvdsei

声明与定义分开,得在主函数中引入.cpp文件,而不是.h文件,若
引用.h文件也会报连接错误,我的错误就属于这种情况,还可以向一楼所说那样把定义与声明放在一起也可以解决,链接的博客里有个链接讲序了缘由。

2、在论坛中我所说编译器问题,在代码中有个隐含问题,脏数据,所以在释放是还的加上指针指向NULL,这样可以使程序更好运行,我在Mac下中xcode完成最后测试,是没有问题,完美运行的。


贴下代码:

//

//  ProblemTemplate.cpp

//  test_1

//

//  Created by test on 16/9/8.

//  Copyright © 2016 test. All rights reserved.

//


#include "ProblemTemplate.hpp"


using namespace std;


#define CTTT template

#define CT ClassTemplate::


//输入

CTTTvoid CT Input()

{

    cin >>m_array_num_1;

    

    m_array_1 = new T1[m_array_num_1];

   for (int i=0; i<m_array_num_1; i++)

    {

       cin >> m_array_1[i];

    }

   getchar();

    

    m_array_2 = new T2[m_array_num_2];

    cin >>m_array_num_2;

    

   for (int i=0; i<m_array_num_2; i++)

    {

       cin >> m_array_2[i];

    }

   getchar();

    

    cin >>m_array_num_3;

    

    m_array_3 = new T3[m_array_num_3];

   for (int i=0; i<m_array_num_3; i++)

    {

       cin >> m_array_3[i];

    }

   getchar();

}


//输出

CTTTvoid CT Output()

{

    //排序且去重复

    InsertSort(m_array_1,m_array_num_1);

    InsertSort(m_array_2,m_array_num_2);

    InsertSort(m_array_3,m_array_num_3);

    

   //输出

    cout <<"-------------------------" << endl;

   for (int i=0; i<m_array_num_1; i++)

    {

       cout << m_array_1[i] <<" ";

    }

   cout << endl;

    

   for (int i=0; i<m_array_num_2; i++)

    {

       cout << m_array_2[i] <<" ";

    }

   cout << endl;

    

   for (int i=0; i<m_array_num_3; i++)

    {

       cout << m_array_3[i] <<" ";

    }

   cout << endl;

    

    m_array_1 = NULL;

    m_array_2 = NULL;

    m_array_3 = NULL;

    free(m_array_1);

    free(m_array_2);

    free(m_array_3);

}


//直接插入排序且去重复

CTTT template <typename T>

voidCT InsertSort(T * &pArray, int &n)

{

   int i,j;

    T temp;

    

   for(i=1; i

    {

       if(pArray[i] < pArray[i-1])

        {

            temp = pArray[i];

            j = i;

        

           while(temp < pArray[j-1] && j !=0)

            {

                pArray[j] = pArray[j-1];

                j--;

            }// end while j

        

            pArray[j] = temp;

        } // end if pArray[i] < pArray[i-1]

    } // end for i

    

    T * pArray_tmp =new T[n];

   int n_var = 0;

    

   for(int k=0; k1; k++)

    {

       bool exchang = false;

       int m = 0;

        

       for(int p=k+1; p

        {

           if(pArray[k] == pArray[p])

            {

                exchang =true;

                m++;

            } // end if pArray[k] == pArray[p]

        } // end for p

        

       if(!exchang)

        {

            pArray_tmp[n_var++] = pArray[k];

        } // end if exchang left

       else

        {

            k = k + m -1;

        } // end if exchang right

    } // end for k

    

    pArray_tmp[n_var++] = pArray[n-1];

    n = n_var;

    pArray = pArray_tmp;

    

    pArray_tmp =NULL;

    free(pArray_tmp);

} // end InsertSort()




你可能感兴趣的:(c/c++,算法)