//template1.h
#include"stdafx.h"
#include<iostream>
#include<string>
using namespace std;
#ifndef ARRAY
#define ARRAY
const int len=10;
template<class T>
class Array
{
public:
Array()
{
m_len=0;
m_a=new T[len];
}
Array(int len)
{
m_len=len;
m_a=new T[len];
}
void reset();
friend ostream& operator<<(ostream& out, const Array<T>&value)
{
for (int i = 0; i < value.m_len; i++)
out << value.m_a[i] ;
return out;
}
private:
int m_len;
int *m_a;
};
template<class T>
void reset()
{
cout<<"请输入数组里的元素:"<<endl;
for(int i=0;i<len;i++)
cin>>m_a[i];
}
#endif
//11.5.1.cpp
#include"stdafx.h"
#include"template1.h"
#include<iostream>
using namespace std;
int main()
{ Array<int>A(10);
A.reset();
cout<<"输出数组中的元素"<<endl;
cout<<A;
return 0;
}
你的reset的在类中的声明没错,但是在类外的定义不对,修改定义的地方。
void reset()
此句改为
void Array<T>::reset()
//template1.h
#include"stdafx.h"
#include<iostream>
#include<string>
using namespace std;
#ifndef ARRAY
#define ARRAY
const int len = 10;
template<class T>
class Array
{
public:
Array()
{
m_len = 0;
m_a = new T[len];
}
Array(int len)
{
m_len = len;
m_a = new T[len];
}
void resets();
friend ostream& operator<<(ostream& out, const Array<T>& value)
{
for (int i = 0; i < value.m_len; i++)
out << value.m_a[i];
return out;
}
private:
int m_len;
int* m_a;
};
template<class T>
void Array<T>::resets() //需要修改的地方
{
cout << "请输入数组里的元素:" << endl;
for (int i = 0; i < len; i++)
cin >> m_a[i];
}
#endif
//11.5.1.cpp
#include"stdafx.h"
#include"template1.h"
#include<iostream>
int main()
{
Array<int>A(10);
A.resets();
std::cout << "输出数组中的元素" << std::endl;
std::cout << A;
return 0;
}