我想知道为什么对静态函数的调用是模棱两可的,即使两者之一显然不可能调用,因为它是私有(private)的。我希望我可以使用private/protected继承来帮助编译器解决歧义。它是特定于MSVC还是以某种方式在标准中指定?structA{staticintnum(){return0;}};structB{staticintnum(){return1;}};structC:publicA,privateB{};intmain(){C::num();//Ambiguousaccessofnum}背景是我正在尝试一种通过继承在许多派生类(C、D、E、F、G)中重用重载行为(A中的行为)
你们谁能解释一下为什么下面这段代码不能编译?#includeusingnamespacestd;classFoo{public:Foo(){cout我收到的错误:$g++-ocopy_ctor_assigncopy_ctor_assign.cc&&./copy_ctor_assigncopy_ctor_assign.cc:Infunction'intmain()':copy_ctor_assign.cc:10:error:'Foo::Foo(constFoo&)'isprivatecopy_ctor_assign.cc:17:error:withinthiscontext注意:当我删除
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++:overridingpublic\privateinheritanceclassbase{public:virtualvoiddoSomething()=0;};classderived:publicbase{private://现在,如果我执行以下操作:base*b=newderived;b->doSomething();//Callsthederivedclassfunctioneventhoughthatisprivate问题:它能够调用派生类函数,即使它是私有(private)的。这怎么可能?
发现了这个奇怪的编译行为,检查了VS2012、VS2017和https://www.onlinegdb.com/online_c++_compiler)基本上对于私有(private)嵌套类,您可以在外部调用公共(public)函数,但不能调用公共(public)构造函数。3个问题:编译器让我调用func()的原因是什么?如果编译器让我调用func(),为什么我不能调用ctor?如果我不能调用ctor,为什么emplace_back可以调用?classOuter{structPrivateInner{PrivateInner(){}voidfunc(){}};public:Privat
为什么我要定义一个包含私有(private)方法的C++接口(interface)?即使在公共(public)范围内的方法在技术上假设行为类似于在接口(interface)实现上使用私有(private)方法的模板方法,即使如此,我们也会告诉技术规范。直接从界面。这不是偏离了接口(interface)的原始用法,即外部和内部之间的公共(public)契约吗?您还可以定义一个友元类,它将使用我们类中的一些私有(private)方法,从而强制通过接口(interface)实现。这可能是一个争论。在C++接口(interface)中定义私有(private)方法还有哪些其他参数?
我的代码如下templateclassname{public:name():h_(0){}templateoperatorname(){nameu;u.h_=h_;returnu;}private:inth_;};intmain(void){namea;nameb=a;return0;}我得到的错误是intname::h_isprivate.如何修复错误? 最佳答案 name和name是不同的实例化,因此实际上是不同的类。默认情况下不能共享它们的私有(private)成员。你需要制作name所有其他人的friendname的。tem
我目前正在尝试学习更多有关C++面向对象设计的知识(熟悉Java),但遇到了一些困难。我试图将这个项目放在一起,以在使用SFML构建图形和音频的游戏中学习这些原则。我有以下两个文件。WorldObject.h#ifndefWORLDOBJECT_H#defineWORLDOBJECT_H#include#include#include"ImageManager.h"classWorldObject{private:sf::Sprite_sprite;voidSetImagePath(std::stringpath);sf::SpriteGetGraphic();};#endif世界对象
我很困惑为什么C++编译器不接受这个:classFoo{private:voidBaz(){}};classBar{public:voidBaz(){};classFooBar:publicFoo,publicBar{};voidmain(){FooBarfb;fb.Baz();}gcc给出的错误是:requestformember‘Baz’isambiguouscandidatesare:voidBar::Baz()voidFoo::Baz()但是我想要Bar::Baz()不是很明显吗,因为Foo::Baz()是私有(private)的?为什么编译器不会在这里消除歧义?
有没有办法直接暴露私有(private)父类的一些方法。在下面的示例中,如果我有一个Child类型的对象,我希望能够直接调用其父对象的方法a(),而不是b();当前的解决方案会生成大量样板代码,尤其是在存在大量参数的情况下。classParent{public:voida(intp1,doublep2,intp3,std::vector&p4);voidb();};classChild:privateParent{public:voida(intp1,doublep2,intp3,std::vector&p4){Parent::a(p1,p2,p3,p4);}};
我一直在自学C++,并开始创建一个列表管理器来研究指针的概念。我定义了一个名为List的类,它具有三个属性:intitemTotal;Item*firstItem;Item*lastItem;构造函数将它们的值设置为:itemTotal=0;firstItem=NULL;lastItem=NULL;我构建了一个函数来返回itemTotal的值:intList::getItemTotal(){returnitemTotal;}在我的驱动程序中构建对象后,itemTotal立即开始表现得很有趣并返回非常大的数字(每次都是-858993460),即使列表上没有完成任何工作并且程序中几乎没有发