带模板的友元类怎么定义

#include "iostream.h"

template <class T>
class A
{
friend class B;
public:
A(T &item):data(item){}
private:
T data;

};

template <class T>
class B
{
public:
void f(){
cout<<"B"<<endl;
}
};

如上的程序编译后如下:
Compiling...
1.cpp
C:\Documents and Settings\Administrator\1.cpp(21) : error C2989: 'B' : template class has already been defined as a non-template class
C:\Documents and Settings\Administrator\1.cpp(6) : see declaration of 'B'
执行 cl.exe 时出错.

1.obj - 1 error(s), 0 warning(s)
这是怎么回事?该怎么改?谢谢!

#include <iostream>

using namespace std;

template <class T>
class B
{
public:
void f(){
cout<<"B"<<endl;
}
};

template <class T>
class A
{
friend class B;
public:
A(T &item):data(item){}
private:
T data;

};

int main(int argc, char* argv[])
{
return 0;
}

你要先声明class B;才能在class A中使用他.
也可以这样.

#include <iostream>

using namespace std;

template <class T>
class B;

template <class T>
class A
{
friend class B;
public:
A(T &item):data(item){}
private:
T data;

};

template <class T>
class B
{
public:
void f(){
cout<<"B"<<endl;
}
};

int main(int argc, char* argv[])
{
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-04-07
#include
<iostream>
using
namespace
std;
template
<class
T>
class
B
{
public:
void
f(){
cout<<"B"<<endl;
}
};
template
<class
T>
class
A
{
friend
class
B;
public:
A(T
&item):data(item){}
private:
T
data;
};
int
main(int
argc,
char*
argv[])
{
return
0;
}
你要先声明class
B;才能在class
A中使用他.
也可以这样.
#include
<iostream>
using
namespace
std;
template
<class
T>
class
B;
template
<class
T>
class
A
{
friend
class
B;
public:
A(T
&item):data(item){}
private:
T
data;
};
template
<class
T>
class
B
{
public:
void
f(){
cout<<"B"<<endl;
}
};
int
main(int
argc,
char*
argv[])
{
return
0;
}
相似回答
大家正在搜