为什么
class A;
template<typename T> class B
{
private:
A* a;
public:
B();
};
class A : public B<int>
{
private:
friend B<int>::B<int>();
int x;
};
template<typename T>
B<T>::B()
{
a = new A;
a->x = 5;
}
int main() { return 0; }
导致
../src/main.cpp:15:错误:无效使用构造函数作为模板
../src/main.cpp:15:注意:使用'B::B'而不是'B::class B'以限定名称命名构造函数
但改变friend B<int>::B<int>()
为friend B<int>::B()
结果
../src/main.cpp:15: 错误:没有在类'B'中声明的'void B::B()'成员函数</p>
同时完全删除模板
class A;
class B
{
private:
A* a;
public:
B();
};
class A : public B
{
private:
friend B::B();
int x;
};
B::B()
{
a = new A;
a->x = 5;
}
int main() { return 0; }
编译和执行都很好——尽管我的 IDE 说朋友 B::B() 是无效的语法?