草庐IT

private-messaging

全部标签

c++ - 为什么私有(private)继承不能解决静态函数的歧义? (在 MSVC 中测试)

我想知道为什么对静态函数的调用是模棱两可的,即使两者之一显然不可能调用,因为它是私有(private)的。我希望我可以使用private/protected继承来帮助编译器解决歧义。它是特定于MSVC还是以某种方式在标准中指定?structA{staticintnum(){return0;}};structB{staticintnum(){return1;}};structC:publicA,privateB{};intmain(){C::num();//Ambiguousaccessofnum}背景是我正在尝试一种通过继承在许多派生类(C、D、E、F、G)中重用重载行为(A中的行为)

c++ - 将私有(private)复制构造函数与公共(public)赋值运算符一起使用时出错

你们谁能解释一下为什么下面这段代码不能编译?#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注意:当我删除

c++ - 派生类中的私有(private)虚函数

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++:overridingpublic\privateinheritanceclassbase{public:virtualvoiddoSomething()=0;};classderived:publicbase{private://现在,如果我执行以下操作:base*b=newderived;b->doSomething();//Callsthederivedclassfunctioneventhoughthatisprivate问题:它能够调用派生类函数,即使它是私有(private)的。这怎么可能?

C++私有(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

c++ - C++接口(interface)中的私有(private)方法?

为什么我要定义一个包含私有(private)方法的C++接口(interface)?即使在公共(public)范围内的方法在技术上假设行为类似于在接口(interface)实现上使用私有(private)方法的模板方法,即使如此,我们也会告诉技术规范。直接从界面。这不是偏离了接口(interface)的原始用法,即外部和内部之间的公共(public)契约吗?您还可以定义一个友元类,它将使用我们类中的一些私有(private)方法,从而强制通过接口(interface)实现。这可能是一个争论。在C++接口(interface)中定义私有(private)方法还有哪些其他参数?

c# - 谁知道mc.exe(Message Compiler)怎么用?

我正在尝试使用mc.exe为我的事件日志编写程序制作消息文件。但即使是samplemessagefile微软提供的不会编译。谁知道mc.exe可以编译的消息文件怎么写?编辑:我收到的错误信息是:msgs.mc(1):error:expectedkeyword-??编辑2:问题已解决。mc.exe只能支持Unicode或ANSI编码的源文件。我的文件编码为UTF8。就是这样。谢谢。 最佳答案 始终记录您收到的错误消息被迫猜测:如果您在第82行遇到错误,提示无效字符(0x2e),则在文本编辑器中打开文件,将光标放在.然后按Enter以换

c++ - 实例化模板时无法访问在类错误中声明的私有(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++ - 这个私有(private)变量 "not declared in this scope"怎么样?

我目前正在尝试学习更多有关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++ - 为什么 C++ 编译器不区分同名的继承公共(public)方法和继承私有(private)方法?

我很困惑为什么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)的?为什么编译器不会在这里消除歧义?

c++ - 有没有简单的方法来公开私有(private)父类 C++ 的方法

有没有办法直接暴露私有(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);}};