这个是鄙人发表一篇论坛,刚结帖,由于没有回复次数,导致没写结贴总结,在这写下结贴总结,也希望以后也出现此问题的朋友们知道怎么处理:
论坛链接: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
InsertSort
InsertSort
//输出
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; 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()