草庐IT

Human-friendly

全部标签

c++ - Friend 类、继承和 typedef——哪种行为是正确的?

我偶然发现了一个错误,该错误仅在GCC6.2.0上出现,但在Clang3.9.0上没有出现(均在-std=c++14模式下)。我不确定哪种行为是正确的(以及我是否应该提交错误)。代码如下:templateclassfoo_t{};classbar_t{public:usingfoo_t=int;};classbaz_t:publicbar_t{private:templatefriendclassfoo_t;};在GCC上,这会产生以下错误:test.cpp:17:15:error:usingtypedef-name‘usingfoo_t=int’after‘class’friendc

C++ - ostream、 friend 和命名空间

在我将我的对象移动到命名空间之前,一切都很好。现在编译器声称我的Color属性是私有(private)的。我认为friend的全部意义在于与类的friend分享封装的信息。颜色.hfriendostream&operator颜色.cpp:ostream&operator错误:Color.h||Infunction'std::ostream&operator那到底是怎么回事呢?我使用Code::Blocks作为我的IDE。当我在“颜色”参数上使用点运算符时,它甚至不会显示任何属性或方法。这显然是出现问题的迹象……某处。我已经去掉了友元运算符的重载,它编译得很好。其他地方没有错误。给了什么

c++ - 作为 friend 的模板参数

在C++03中,以下是非法的,尽管一些编译器支持它。templateclassX{friendT;};这在C++11中合法化了吗?(不好意思,自己没时间看草稿,希望有人知道) 最佳答案 来自N3291的§11.3,3部分:templateclassR{friendT;};Rrc;//classCisafriendofRRRi;//OK:"friendint;"isignored所以它在C++11中是合法的。 关于c++-作为friend的模板参数,我们在StackOverflow上找到一

C++ friend 构造函数

我有两个类:Point,它只存在于SpaceclassPoint{private:Point(constSpace&space,intx=0,inty=0,intz=0);intx,y,z;constSpace&m_space;};构造函数是有意私有(private)的,我不想直接调用它。我想以这种方式创建积分SpacemySpace;PointmyPoint=mySpace.Point(5,7,3);有什么办法吗?谢谢。 最佳答案 是的,将Space::Point()声明为友元方法。该方法将获得对Point的私有(private)

c++ - 在没有 friend 的情况下授予对私有(private)构造函数的访问权限?

我正在写一些代码,我遇到了类似的情况:structBar;structFoo{friendstructBar;private:Foo(){}voidf(){}voidg(){}};structBar{Foo*f;Bar(){f=newFoo();}~Bar(){deletef;}};intmain(){Barb;}我宁愿Bar不是Foo的friend,因为除了Foo的构造函数Bar不需要访问任何Foo的私有(private)方法(因此不应该访问)。有没有办法只允许Bar创建Foo而不让它们成为friend?PS:意识到问题可能不是100%清楚。我不介意是否通过friend,只是所有Ba

c++ - 我如何在图书馆内让 main 成为我类(class)的 friend ?

请参阅myfirstattemptatansweringthis.我之前为了简化事情而忽略了讲述整个故事。事实证明我的例子有效!对不起。整个故事是,这是一个库,在一个文件中包含一个类,在另一个文件中包含主要内容,所有这些都链接到我的库中。该库为流程框架提供了基础,这就是为什么main在库中而不是流程中。下面是我所拥有的精简版。pf.hppusingnamespacestd;namespaceMyNamespace{classProcessManager{public:friendintmain(intargc,char**argv);private:voidtest();};};pf.

c++ - 如何让 boost::make_shared 成为我类(class)的 friend

我编写了一个带有protected构造函数的类,因此只能使用静态create()函数生成新实例,该函数将shared_ptr返回我的类。为了提供有效的分配,我想在create函数中使用boost::make_shared,但是编译器提示说我的类构造函数在boost::make_shared中受到保护。我决定让我的boost::make_shared成为我类的friend,但我对语法感到困惑。我试过了templatefriendboost::shared_ptrboost::make_shared(constConnectionManagerPtr&,conststd::string&)

c++ - 具有继承的 friend 类

如果我有两个继承类如下:classA{...}classB:publicA{...}第三个类定义为friend类A:classC{friendclassA;}我是否能够从classB(也是A类型的对象)访问classC的所有成员,就好像我一开始就定义了classBfriendClass吗? 最佳答案 friendship既不继承也不传递。两个类之间是严格的一对一关系。classA{friendclassB;intAries;};classB{friendclassC;intTaurus;};classC{intLeo;voidCap

c++ - 将 'friend class xxxxx' 放在公共(public)部分还是私有(private)部分会有什么不同吗?

classA1{public:friendclassB;}classA2{private:friendclassB;}有什么不同吗? 最佳答案 不,访问说明符对friend声明没有影响。 关于c++-将'friendclassxxxxx'放在公共(public)部分还是私有(private)部分会有什么不同吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2722222/

c++ - 基类的虚拟 friend 函数?

我正在学习这门语言,这是一个菜鸟的疑问。是否可以使用虚拟friend功能?我不知道这是否可能,我什至没有测试它,但它在某些情况下可能很有用。例如,对于重载的运算符DerivedClassdc;BaseClass&rbc=dc;cout我猜这是可能的,但我不确定,因为友元函数没有在类设计中实现,理论上也不是它的一部分(尽管在这个例子中,从概念上讲,operator编辑:我的担忧与这个例子有关:BaseClassbc;DerivedClassdc;BaseClass*pArr[2];pArr[1]=bc;pArr[2]=dc;for(inti=0;i在这个混合对象数组中,我希望为每个对象调