草庐IT

c++ - 为什么在父类中声明虚函数时出现 Unresolved external 错误?

我有这个父类:enumUI_STATE{UI_STATE_SPLASH_SCREEN,UI_STATE_LOGIN_SCREEN,UI_STATE_CHARACTER_CREATION_SCREEN,UI_STATE_CHARACTER_CHOOSE_SCREEN,UI_STATE_LOADING_SCREEN,UI_STATE_GAMEPLAY,UI_STATE_EXIT_REQUESTED,UI_STATE_UNKNOWN};[event_source(native)]classUserInterface{protected:MyGUI::Gui*mGUI;public:stati

c++ - 一个基类只有一个派生类可以吗?

我正在使用OOD和设计模式创建密码模块。该模块将保留可记录事件的日志并读取/写入文件。我在基类中创建了接口(interface),在派生类中创建了实现。现在我想知道如果一个基类只有一个派生类,这是否有点难闻。这种类层次结构是不必要的吗?现在为了消除类层次结构,我当然可以只在一个类中做所有事情而根本不派生,这是我的代码。classCLogFile{public:CLogFile(void);virtual~CLogFile(void);virtualvoidRead(CStringstrLog)=0;virtualvoidWrite(CStringstrNewMsg)=0;};派生类是:

c++ - 为什么 std::unary_function 不包含虚拟析构函数

我遇到了类模板std::unary_function和std::binary_function。templatestructunary_function{typedefArgargument_type;typedefResultresult_type;};templatestructbinary_function{typedefArg1first_argument_type;typedefArg2second_argument_type;typedefResultresult_type;};这两个都可以用作特定用途的基类。但是其中仍然没有虚拟析构函数。我猜的原因之一是这些并不意味着要进

c++ - 从抽象基类 : does override specifier have any meaning? 实现纯虚函数

背景我刚刚偶然发现了overridespecifier的一个用例据我所知,这似乎是多余的,也没有任何特定的语义含义,但也许我遗漏了一些东西,因此出现了这个问题。在继续之前,我应该指出我已经尝试在SO上找到它的答案,但我得到的最近的是以下线程,并没有真正回答我的查询(也许有人可以指出实际上已经回答了我的问答问题)。C++Virtual/PureVirtualExplainedC++overridepurevirtualmethodwithpurevirtualmethod问题考虑以下抽象类:structAbstract{virtual~Abstract(){};virtualvoidfo

c++ - 覆盖虚拟成员函数时,为什么覆盖函数总是变为虚拟?

当我这样写的时候:classA{public:virtualvoidfoo()=0;}classB{public:voidfoo(){}}...B::foo()也变为虚拟的。这背后的原理是什么?我希望它的行为类似于Java中的final关键字。补充:我知道它是这样工作的,也知道vtable是如何工作的:)问题是,为什么C++标准委员会没有留下直接调用B::foo()并避免vtable查找的机会。 最佳答案 标准确实留下了直接调用B::foo并避免表查找的机会:#includeclassA{public:virtualvoidfoo(

c++ - 在 C++ 中寻找比虚拟继承更好的方法

好的,我有一个有点复杂的C++系统。简而言之,我需要向第三方抽象基类添加一个方法。第三方还提供了大量也需要新功能的派生类。我正在使用一个提供标准Shape接口(interface)以及一些常见形状的库。classShape{public:Shape(position);virtual~Shape();virtualpositionGetPosition()const;virtualvoidSetPosition(position);virtualdoubleGetPerimeter()const=0;private:...};classSquare:publicShape{public

c++ - 继承层次结构 : Constructor & Destructor execution sequence

在这里http://www.parashift.com/c++-faq-lite/multiple-inheritance.html[25.14]节说Theveryfirstconstructorstobeexecutedarethevirtualbaseclassesanywhereinthehierarchy.我尝试使用以下程序验证它:A(purevirtual)|B|C(virtual)/\(virtual)ED\/F|G(purevirtual)|H每个类都有一个c'tor和virtuald'tor。输出如下:ABCEDFGH~H~G~F~D~E~C~B~APressanyke

C++ "virtual"关键字放置

当我今天在VisualStudio2015中编写界面时,我注意到一些奇怪的行为。在函数标识符之前放置“virtual”关键字通常无关紧要,但如果它放置在指针或引用之后,它就会报错。请参阅以下内容:classB{};classA{virtualBfun1a();//OKBvirtualfun1b();//OKvirtualB&fun2a();//OKB&virtualfun2b();//ERROR,"expectedanidentifier"virtualB*fun3a();//OKB*virtualfun3b();//ERROR,"expectedanidentifier"virtua

c++ - C3859 : Virtual memory range for PCH exceeded

我在编译(编辑:抱歉,我在这里没有说清楚:我实际上是指“重建”)我的混合模式项目时不时(不是每次)收到此错误消息。VisualStudio告诉我“使用‘-Zm114’或更高的命令行选项重新编译”。原则上没问题,我照VS说的做。但是目前,这有两个问题:为什么它不会在我进行重建时每次发生?如果我理解正确,编译器在编译我的项目时内存不足。因此,如果我进行重建,清除所有以前的工作,如果我不做任何更改,下次它不应该也用完内存吗?为了安全起见,我已经在这个项目的所有配置中为Zm(即Zm120)指定了120的值。为什么我会收到带有此较低值的错误消息?还是建议值114只是VS的胡乱猜测?

c++ - C++17 中纯虚函数的主体?

我试图在基类中编写一个纯虚函数,并且我给它一个接近定义的函数体,如下面的代码所示,我知道我应该得到一个编译错误,但是一切正常。它是C++17附带的新东西吗?(我用的是visualstudio2017)classBase{public:virtualvoidvirtual_func(){std::cout谢谢 最佳答案 纯虚不能和定义一起使用。在C++11和C++14中都是如此:10.4/2:...[Note:Afunctiondeclarationcannotprovidebothapure-specifierandadefinit