命名空间内的错误 c2248 朋友类

Posted

技术标签:

【中文标题】命名空间内的错误 c2248 朋友类【英文标题】:error c2248 friend class inside namespace 【发布时间】:2014-12-08 13:39:56 【问题描述】:

我正在尝试设置类似这样的代码:

//Class1.h
namespace A 
    class Class1 
        friend class Class2
        public:
            Class1();
            ~Class1();
        private:
            void Create()  /*do nothing for now*/ ;
    ;


//Class2.h
#include "Class1.h"
namespace A 
    class Class2 
        void Test();
    ;
 //end namespace A

//Class2.cpp
#include "Class2.h"
namespace A 
    void Class2::Test() 
        Class1 object = Class1();
        object.Create(); //error c2248
    

我得到了错误

“错误 101 错误 C2248: 'Class1::Create' : 无法访问私有 在类 'Class1' 中声明的成员"

。什么会导致这个?我是否以错误的方式宣示友谊?

【问题讨论】:

This works fine 在 gcc 上。您的问题可能出在其他地方。 还要注意朋友声明中缺少的分号。 【参考方案1】:

我使用 Code:Blocks 13.12(SDK 版本 1.19.0)以及 ideone.com 尝试了您的示例。

我所做的唯一更改以使其成功编译

在朋友声明后添加分号 将空块 添加到Class1 的ctr 和dtr 当然,我也删除了包含语句(全部放在一个文件中)

【讨论】:

以上是关于命名空间内的错误 c2248 朋友类的主要内容,如果未能解决你的问题,请参考以下文章

整个类范围内的 C++ 命名空间别名

获取命名空间内的所有类[重复]

命名空间内的类定义

不同命名空间内的类的循环依赖 C++

为啥我不能从不同命名空间中的朋友类更改类的私有成员?

组内的 Laravel 组不起作用,它没有看到命名空间参数