关于c++类模板编译器问题以及不同编译器编码问题

C++语言 码拜 8年前 (2016-09-23) 1210次浏览
写了个小算法,使用类模板时,总出现主函数返回值为 1 而导致的无法运行,编译没有代码问题,去掉类模板使用,在dec c++下完美运行,但在vs中使用类模板也是一样但是运行输入时,结果不一样,而且还会出现中断问题,有点纳闷。希望各位高手,帅哥美女能帮看看,提点想法?
下面是代码:
#ifndef _CLASSTEMPLATE_H
#define _CLASSTEMPLATE_H
//template<class T1, class T2, class T3>
class ClassTemplate
{
private:
//3行数组的数量
int m_array_num_1;
int m_array_num_2;
int m_array_num_3;
//3行数组存数
int * m_array_1;
double * m_array_2;
char * m_array_3;
public:
//输入函数
void Input();
//输出函数
void Output();
//直接插入排序且去重复函数
template <typename T>
void InsertSort( T * &pArray, int &n );

};
#endif
#include “iostream”
#include “ClassTemplate.h”
#include “malloc.h”
//#define CCT template <typename T1, typename T2, typename T3>
#define CT ClassTemplate::
using namespace std;
//输入
void CT Input()
{
cin >> CT m_array_num_1;
CT m_array_1 = new int[CT m_array_num_1];
for(int i=0; i<CT m_array_num_1; i++)
{
cin >> CT m_array_1;
}
getchar();
cin >> CT m_array_num_2;
CT m_array_2 = new double[CT m_array_num_2];
for(int i=0; i<CT m_array_num_2; i++)
{
cin >> CT m_array_2[i];
}
getchar();
cin >> CT m_array_num_3;
CT m_array_3 = new char[CT m_array_num_3];
for(int i=0; i<CT m_array_num_3; i++)
{
cin >> CT m_array_3[i];
}
getchar();
}
//输出
void CT Output()
{
//排序去重复
InsertSort<int>( CT m_array_1, CT m_array_num_1 );
InsertSort<double>( CT m_array_2, CT m_array_num_2 );
InsertSort<char>( CT m_array_3, CT m_array_num_3 );
//显示
cout << “–” << endl;
for(int i=0; i<CT m_array_num_1; i++)
{
cout << CT m_array_1[i] << ” “;
}
cout << endl;

for(int i=0; i<CT m_array_num_2; i++)
{
cout << CT m_array_2[i] << ” “;
}
cout << endl;
for(int i=0; i<CT m_array_num_3; i++)
{
cout << CT m_array_3[i] << ” “;
}
cout << endl;
free(CT m_array_1);
free(CT m_array_2);
free(CT m_array_3);
}
//排序去重复
template <typename T>
void CT InsertSort( T * &pArray, int &n )
{
int i,j;
T temp = 0; //定义一个哨兵
for( i = 1; i < n; i++ )
{
if( pArray[i] < pArray[i-1] ) //选择顺序的排列
{
temp = pArray[i]; //哨兵临时储存
j = i; //防止数组溢出所以j = i,但判断i-1个有序区元素排序
while( temp < pArray[j-1] && j != 0 ) //有序区中的排序,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<n-1; k++)
{
bool exchang = false;
int m = 0;
for(int p=k+1; p<n; 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 right
} // end for k
pArray_tmp[n_var++] = pArray[n-1];
n = n_var;
pArray = pArray_tmp;
free(pArray_tmp);

} //end InsertSort()
#include <iostream>
#include “ClassTemplate.h”
#include “string”
using namespace std;
int main(int argc, char** argv)
{
ClassTemplate test;
test.Input();
test.Output();
getchar();
return 0;
}
不使用模板运行图和使用模板后运行图:
关于c++类模板编译器问题以及不同编译器编码问题关于c++类模板编译器问题以及不同编译器编码问题
[i]使用模板的时候加上模板代码就行,这里使用模板是为了排序函数及3个指针类型好变化,本人知道可以用宏或type代替类型,本人想知道假如模板怎么做,或怎么改,希望各位高手帮一下忙,指点或用模板改下,若能如此,由衷谢谢

解决方案

60

请把模板声明与定义放在一起

20

  cin >> CT m_array_1;看看这句

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于c++类模板编译器问题以及不同编译器编码问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)