【发布时间】:2017-03-01 17:43:26
【问题描述】:
#include <iostream>
using namespace std;
struct s1;
template <typename... type>
class Base : public type::inner...
{
friend struct s1;
};
struct Test;
struct s1
{
template <typename... type>
friend class Base;
friend class Test;
private:
struct inner {
int member1;
int member2;
};
};
struct s2
{
struct inner {
int member3;
int member4;
};
};
struct Test : public s1::inner, public s2::inner
{
};
int main()
{
Base<s1, s2> base;
base.member1 = 0;
Test t;
t.member3 = 22;
cout << "Hello world!" << endl;
return 0;
}
当我尝试编译上述代码时,出现以下错误
在“类 Base”的实例化中: 错误:'struct s1::inner' 是私有的
但是,当尝试通过注释掉基变量来编译此程序时,类 Test 编译成功且没有错误。我想让名为 Base 的模板类成为 struct s1 的朋友。我该怎么做?
【问题讨论】:
-
我注意到您正在声明类 Test 和交友类 test,但 Test 是一个结构。这是故意的吗?
-
“但是Test类编译成功没有错误。”什么意思?我怀疑编译器在抱怨
Test之前停止了。 -
@tramstheman 这是一个错字。对不起。 πάντα ῥεῖ 我尝试通过注释掉基本变量来编译测试。这样就编译成功了。将更新问题
-
g++ 扼流圈,clang++ 吞咽。
-
我刚刚运行了您发布的代码,它编译并运行良好。你用的是什么编译器?