#include<iostream>
using namespace std;
template <typename T>
class HasFriend
{
private:
T item;
static int ct;
public:
HasFriend(const T & i) :item(i) {ct++;} ----1,
friend void counts();
friend void reports(HasFriend<T> &);
};
template <typename T> int HasFriend<T>::ct=0; ----2,
void counts()
{
cout<<"int count: "<<HasFriend<int>::ct<<";"; // undefined reference to `HasFriend<int>::ct' if no ---2 compiler error
}
void reports(HasFriend<int> &hf)
{
cout<<"reports"<<endl;
}
int main()
{
counts();
HasFriend<int> abc(10); // ../template1.cpp:27:23: note: candidates are:
../template1.cpp:4:7: note: HasFriend<int>::HasFriend()
../template1.cpp:4:7: note: candidate expects 0 arguments, 1 provided
../template1.cpp:4:7: note: HasFriend<int>::HasFriend(const HasFriend<int>&)
../template1.cpp:4:7: note: no known conversion for argument 1 from ‘int’ to ‘const HasFriend<int>&’ if no ---1 compiler error
using namespace std;
template <typename T>
class HasFriend
{
private:
T item;
static int ct;
public:
HasFriend(const T & i) :item(i) {ct++;} ----1,
friend void counts();
friend void reports(HasFriend<T> &);
};
template <typename T> int HasFriend<T>::ct=0; ----2,
void counts()
{
cout<<"int count: "<<HasFriend<int>::ct<<";"; // undefined reference to `HasFriend<int>::ct' if no ---2 compiler error
}
void reports(HasFriend<int> &hf)
{
cout<<"reports"<<endl;
}
int main()
{
counts();
HasFriend<int> abc(10); // ../template1.cpp:27:23: note: candidates are:
../template1.cpp:4:7: note: HasFriend<int>::HasFriend()
../template1.cpp:4:7: note: candidate expects 0 arguments, 1 provided
../template1.cpp:4:7: note: HasFriend<int>::HasFriend(const HasFriend<int>&)
../template1.cpp:4:7: note: no known conversion for argument 1 from ‘int’ to ‘const HasFriend<int>&’ if no ---1 compiler error
counts();
}
结果 :int count: 0;int count: 1;