草庐IT

多重性

全部标签

c++ - 为什么具有相同名称但不同签名的多重继承函数不被视为重载函数?

以下代码片段在编译过程中产生了“对foo的模糊调用”错误,我想知道是否有任何方法可以在不完全限定对foo的调用的情况下解决此问题:#includestructBase1{voidfoo(int){}};structBase2{voidfoo(float){}};structDerived:publicBase1,publicBase2{};intmain(){Derivedd;d.foo(5);std::cin.get();return0;}所以,问题如题。想法?我的意思是,以下操作完美无缺:#includestructBase{voidfoo(int){}};structDerive

c++ - 多重继承的虚函数表

示例代码如下:classA{public:intk;virtualintf();};classB:publicvirtualA{public:virtualinta();};intmain(){cout打印812似乎B类有自己的新虚函数表。如果A类更改为:classA{public:virtualintf();};打印44谁能解释一下原因? 最佳答案 在您的子类B中,B是A的虚拟子类。因此,B在子对象A的指针之上有一个单独的vtbl指针(4字节)。因此,sizeof(Bobject)=sizeof(Aobject)+sizeof(v

c++ - 多重继承和可变参数模板

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭7年前。Improvethisquestion考虑这段代码:#include#includeclassFoo{protected:voidfoo(){std::coutclassTest:publicArgs...{public:voidtest(){this->foo();this->bar();}};intmain(intargc,char**argv){Testtest;test.test();return0;}正如我们所见,编译器允许我们继承

c++ - opencv源码用cuda编译生成多重定义链接错误

我想用cuda8构建opencv3.2,我已经在我的linux系统中安装了cuda所需的所有库,这是一个Debian9testing(stretch)4.9.0-1-amd64使用cmake成功生成makefile后,通过执行make命令出现多重定义链接错误。我用cmake尝试了很多配置,我也检查了很多论坛中几乎所有相关问题,但我找不到任何解决方案。在cmake中,我将cuda编译器更改为gcc-5,因为cuda8需要gcc编译器不晚于版本5,默认gcc编译器是版本6.3这是我的cmake配置输出:OpenCVmodules:Tobebuilt:cudevcorecudaarithmf

C++多重继承问题

生成此内容的场景非常复杂,因此我将删除一些部分并准确表示所涉及的类。/*ThisisinheritedusingSIbymanyclasses,asnormal*/classIBase{virtualstringtoString()=0;};/*Base2can'tinheritIBaseduetoothermethodsonIBasewhicharen'tappropriate*/classBase2{stringtoString(){...}};/*aspecialclass,isthisvalid?*/classClass1:publicIBase,publicBase2{};那

c++ - _Unwind_resume的Mingw多重定义

我知道有人问过与此类似的问题,但我几个小时都无法解决这个问题。基本上我有一个包含代码的DLL和一个调用它的应用程序。一切正常,但如果我将这两个带出我的开发环境,它会说程序无法启动,因为计算机中缺少libgcc_s_dw21.dll。考虑到它不是开发计算机,这很公平。因此,为了分发,我添加了编译器标志“-static-libgcc-static-libstdc++”。我为dll和应用程序做了这个。但是当我编译应用程序时出现错误:"multipledefinitionof`_Unwind_Resume'"我认为这是由于dll和应用程序都内置了静态库,事实确实如此。但是,如果它们都没有内置静

c++ - 纯虚继承、多重继承、C4505

所以我有一个没有抽象方法的抽象基类。为了加强抽象性,我将(非平凡的)析构函数声明为纯虚拟的:classAbstractClass{public:AbstractClass(){std::wcout这会按预期构建和工作;简单定义ConcreteClass实例的代码块的输出是AbstractClass::AbstractClass()ConcreteClass::ConcreteClass()ConcreteClass::~ConcreteClass()AbstractClass::~AbstractClass()Now,whenIhavederiveAbstractClassfroman

c++ - 具有多态性的多重保护继承

我有一个关于protected函数的多重继承和多态性的问题。很难描述它,所以我希望它足够清楚。假设我有三个类:classbaseClass{protected:virtualintfunction()=0;};classderived_A:publicbaseClass{intfunction(){//implementation1};};classderived_B:publicbaseClass{intfunction(){//implementation2};};classderived_C:publicderived_A,publicderived_B{baseClass**p

c++ - CppUTest 单元测试框架多重定义异常

我将尝试将此作为一个纯粹的最小示例,以尽可能适用于更多人,并保护可能违反NDA的任何类型的代码共享。希望一切都好!我正在使用CppUTest和CppUMock(使用gcc/g++编译并使用CMake创建makefile)与Gitlab持续集成软件一起为future的软件提交和发布创建单元测试环境。但是,我遇到了一些问题。假设我有以下文件夹设置(除了/tests文件夹的内容之外,我几乎无法更改):+--src+--driver1.c+--driver2.c+--inc+--driver1.h+--driver2.h+--tests+--test_driver1.cpp+--test_dr

c++ - 使用模板解决了多重定义

a.hpp:#pragmaoncestructS{staticintv;};intS::v=0;b.hpp:#pragmaoncevoidaddOne();b.cpp:#include"b.hpp"#include"a.hpp"voidaddOne(){S::v+=1;}主要.cpp:#include#include"a.hpp"#include"b.hpp"intmain(){S::v=2;addOne();S::v+=2;std::cout使用g++-std=c++14main.cppb.cpp&&./a.out编译时不起作用(S::v的多重定义)。然而,当我将代码更改为:a.hp