65,184
社区成员




//---test.h
#ifndef test_h_
#define test_h_
#include <iostream>
using namespace std;
template <class T>
class Test
{
private:
T x;
public:
Test (T x_): x(x_) {}
friend void display(Test<T> &t);
};
template <class T>
void display(Test<T> &t)
{
cout << t.x << endl;
}
#endif // test_h_
// ----main.cpp
#include <iostream>
#include "test.h"
using namespace std;
int main()
{
// cout << "Hello world!" << endl;
Test<int> t(20);
display(t);
return 0;
}
//---test.h
#ifndef test_h_
#define test_h_
#include <iostream>
using namespace std;
// 改动一:增加函数模板的声明——而这又需要先声明类模板
template <class T> class Test;
template <class T>
void display(Test<T> &t);
template <class T>
class Test
{
private:
T x;
public:
Test (T x_): x(x_) {}
friend void display<>(Test<T> &t);
// 改动二:在函数名后面加上<>,指明它是之前声明的函数模板 的实例
};
template <class T>
void display(Test<T> &t)
{
cout << t.x << endl;
}
#endif // test_h_
template <class T>
void display(Test<T> &t)
{
cout << t.x << endl;
cout << "display." << endl; // 看看有木有调用到这个函数
}
发现并没有调用这个函数,这个函数与模板类中定义的友元函数并不是关联的,郁闷中#include <iostream>
using namespace std;
template <class T>
class Test
{
private:
T x;
public:
Test (T x_): x(x_) {}
template <class Q>
friend void display(Test<Q> &t);
};
template <class T>
void display(Test<T> &t)
{
cout << t.x << endl;
}
int main()
{
// cout << "Hello world!" << endl;
Test<int> t(20);
display(t);
return 0;
}
#include <iostream>
using namespace std;
// 改动一:增加函数模板的声明——而这又需要先声明类模板
template <class T> class Test;
template <class T>
void display(Test<T> &t);
template <class T>
class Test
{
private:
T x;
public:
Test (T x_): x(x_) {}
template <class Q>
friend void display<>(Test<Q> &t);
// 改动二:在函数名后面加上<>,指明它是之前声明的函数模板 的实例
};
template <class T>
void display(Test<T> &t)
{
cout << t.x << endl;
}
int main()
{
// cout << "Hello world!" << endl;
Test<int> t(20);
display(t);
return 0;
}