classA{};classB:publicA{};classC:publicA,publicB{};intmain(){Cc;A*pA=static_cast(&c);}在上面的代码中,类C是从类A派生而来的,有两种不同的路径:1.直接来自A2.间接通过B即A因此,当我将类C的对象转换为指向类A的指针时,Linux上的g++会报告以下错误:错误:A是C的不明确基数我也通过删除静态转换来尝试相同的代码,如下所示:A*pA=&c;但是,我仍然得到完全相同的错误。有什么解决办法吗?顺便说一句,在使用VisualC++编译器的Windows上同样可以正常工作而不会出错。我知道虚拟继承可以解决
这个问题在这里已经有了答案:Accessingprotectedmembersinaderivedclass(8个答案)关闭3年前。我正在尝试几个关于继承的程序,结果是以下导致了错误,但我真的不知道原因。#includeusingnamespacestd;classBase{protected:intx=0;};classDerived:publicBase{//OK:accessprotectedmemberviathisvoidg(){cout我希望派生类可以访问基类的公共(public)或protected数据成员和成员函数。然而它并没有像我想的那样起作用,谁能帮我阐明我的概念?
我将我的C++工具链从VisualStudio2013更新到VisualStudio2017/2019。现在我遇到了一些形式的编译错误:(13):errorC2280:'OfflineFixture::OfflineFixture(constOfflineFixture&)':attemptingtoreferenceadeletedfunction(8):note:compilerhasgenerated'OfflineFixture::OfflineFixture'here(8):note:'OfflineFixture::OfflineFixture(constOfflineFi
我正在尝试用C++编写图形应用程序。它目前使用OGRE进行显示,但我希望它可以与Irrlicht或任何其他引擎一起使用,甚至是支持我的需求的自定义渲染引擎。这是一个相当长的问题,所以我很感激帮助重新标记/清理(如有必要)。我将从一些背景开始。应用程序主要有3个状态:1.显示光栅化场景2.显示同一场景的光线追踪版本3.显示混合版本的场景显然,我可以将我的应用程序分为四个主要部分:1.一个状态管理系统,可以在以上模式之间切换。2.一个可以接受键盘和鼠标输入的输入系统。3.用于显示的光栅引擎。4.光线追踪系统。包含上述内容的任何应用程序都需要能够:1.创建一个窗口。2.执行允许在该窗口中呈现
在下面的程序中,是行Derived(doubley):Base(),y_(y)正确/允许?也就是说,它是否遵循ANSI规则?#includeclassBase{public:Base():x_(0){std::cout 最佳答案 这是允许的,但没有意义,因为编译器会为您进行调用。不过,恐怕我今天早上不想做标准拖网。 关于c++-调用基类构造函数,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/ques
好的,我正在使用虚函数、重载函数和多重继承。当然,结果并不好。场景:类base1有一个需要由其子类指定的虚函数。类derived派生自两个父类base1和base2,应该使用base2的现有功能来定义base1的虚函数。这没关系,但当然很尴尬。动机是我无法更改类base2并且已经投入大量资金的现有接口(interface)具有同名的base1和base2类函数。没关系,base1中没有实现任何内容,它应该只是重定向到base2。我的问题出现是因为base2有几个与所讨论的虚函数同名的重载函数。所有其他重载版本在编译时基本上都被隐藏了。这是一个小的演示代码。//thisversiondo
合法吗?如果是这样,您认为这是良好的编码习惯吗?我想做这样的事情(不显示不重要的细节):classItemStorage{intsize()const;};classSpecialStorage:publicItemStorage{public:SpecialStorage(...):ItemStorage(...),items(ItemStorage::size()){...}private:intitems;};我很确定如果方法size不是虚拟的就可以了。如果它是虚拟的并且派生类不覆盖它怎么办? 最佳答案 一般规则是,在初始化期
我有一个SuperParent类,一个Parent类(派生自SuperParent)并且都包含一个shared_ptr到一个Child类(它包含一个weak_ptr到一个SuperParent)。不幸的是,我在尝试设置Child的指针时遇到了bad_weak_ptr异常。代码如下:#include#include#include#includeusingnamespaceboost;classSuperParent;classChild{public:voidSetParent(shared_ptrparent){parent_=parent;}private:weak_ptrpare
我想制作一个多线程模型,其中服务器主循环不会因挂起的数据库事务而停止。所以我做了几个简单的类,这是一个非常简化的版本:enumType{QueryType_FindUser=1现在,当我将数据作为Base传输时,我想再次将其转换回User类:concurrency::concurrent_queueBackgroundQueryQueue;voidBackgroundQueryWorker::Worker(){while(ServerRunning){QueryInformation::BaseTemp;if(BackgroundQueryQueue.try_pop(Temp)){sw
我遇到了MISRAC++2008指南,该指南中的规则12-8-2说:Thecopyassignmentoperatorshallbedeclaredprotectedorprivateinanabstractclass.然后我想,当我公开一个抽象类的赋值运算符时,是否可以从除其子类之外的其他类调用它?我觉得不可能。如果这是真的,他们为什么要定义这条规则?基本上,从类设计的角度来看,我不使用具有私有(private)成员的抽象类,也不在基类中定义赋值运算符。因此,通常不需要应用此规则。但是,如果有一个抽象基类的公共(public)赋值运算符,我会将其设置为protected(或尽可能私有