这个问题在这里已经有了答案:CanIcastaderivedclasstoaprivatebaseclass,usingC-stylecast?(3个回答)关闭7年前。我在尝试创建一个继承自定义纯虚函数的类的类的对象时遇到错误。我不确定出了什么问题。我知道我需要重写派生类中的纯虚函数,但它不起作用。我只想重写ProduceItem类中的函数,而不是Celery类,因为我希望Celery类从ProduceItem继承重写的方法。在主要:GroceryItem*cel=newCelery(1.5);//Cannotcast'Celery'toitsprivatebaseclassGroce
我希望仅通过Timer::create()创建我的Timer对象。为此,我将构造函数设为私有(private)。但是,在new_allocator.h的上下文中,我收到一个编译器错误,指出“Timer::Timer(unsignedint)'是私有(private)的”。我该如何解决这个问题?classTimer{private:inttimeLeft;Timer(unsignedintms):timeLeft(ms){}public:staticstd::vectorinstances;staticvoidcreate(unsignedintms){instances.emplace
classSettings{private:typedefstd::mapOptionMap;public:typedefOptionMap::iteratoriterator;typedefOptionMap::const_iteratorconst_iterator;...};此代码可移植吗?关于它的标准规定是什么? 最佳答案 这是合法的,并且Settings::iterator和Settings::const_iterator可供Settings类的所有用户访问。C++中的访问控制纯粹应用于名称。ISO/IEC14882:20
我有两个类;Salary用于保存有关员工薪水的信息和计算,Employee具有classSalary类型的对象和一些成员,例如员工的姓名和地址...我想要做的是防止classSalary被实例化,除了classEmployee。所以我将Salary的构造函数声明为私有(private),并使Employee成为Salary的friend。但我得到错误:classEmployee;classSalary{public:private:Salary():revenue_{},cost_{}{}Salary(intx,inty):revenue_{x},cost_{y}{}intrevenu
正如本文中所解释的Q&Ayesterday,g++4.8和Clang3.3都正确地提示下面的代码错误,比如“'b_'isnotdeclaredinthisscope”#includeclassTest{public:Test():b_(0){}autofoo()const->decltype(b_)//justleaveoutthe->decltype(b_)workswithc++1y{returnb_;}private:intb_;};intmain(){Testt;std::cout将private部分移动到类定义的顶部可以消除错误并打印0。我的问题是,这个错误是否也会在C++1
例如,我想声明一个类,但我希望客户端不能使用复制构造函数(或复制赋值运算符)以下两种都不允许使用拷贝构造函数:1.classTrack{public:Track(){};~Track(){};private:Track(constTrack&){};};2.classTrack{public:Track(){};~Track(){};Track(constTrack&)=delete;};其中一种方式是否比另一种方式“更正确”或相等?有没有副作用?//Doesnotcompilewithboththeabovewaysintmain(){Trackl;Trackp(l);}
我一直对大多数OOP语言(或者更确切地说,C++)让你在接口(interface)中定义私有(private)方法/成员这一事实感到困惑(我所说的接口(interface)是指类声明-似乎我很困惑)。这不是展示了类的实现细节,违背了封装的思想吗?我错过了这个有充分的理由吗? 最佳答案 对于C++,这是一个实现问题。C++编译器必须能够通过只查看类声明而不是实现来生成使用类的代码。编译器需要的一件非常重要的事情是类实例的大小,因为除其他外,C++通过嵌入而不是通过存储对单独对象的引用来处理对象中的子对象。为了能够构建一个对象(例如st
classx{voidxx(){}};classy{friendvoidx::xx();};这会导致类似的错误error:friendfunction'xx'isaprivatememberof'x'为什么我不能将私有(private)成员函数声明为另一个类的friend? 最佳答案 [class.friend]/9:Anamenominatedbyafrienddeclarationshallbeaccessibleinthescopeoftheclasscontainingthefrienddeclaration.原因很简单;p
以下C++11代码在我的GCC4.8上成功编译:structNonStack{private:NonStack()=default;public:staticNonStack*Create(){returnnewNonStack;}};NonStacka;intmain(){}但是以下给出了编译错误:structNonStack{private:NonStack(){}};NonStacka;intmain(){}为什么第一个成功了?私有(private)默认构造函数不应该禁止通过NonStacka;创建对象吗? 最佳答案 这是gc
在下面的代码中,C类似乎无法访问A的构造函数,这是由于虚拟继承所必需的。然而,代码仍然可以编译和运行。为什么会起作用?classA{};classB:privatevirtualA{};classC:publicB{};intmain(){Cc;return0;}此外,如果我从A中删除默认构造函数,例如classA{public:A(int){}};classB:privatevirtualA{public:B():A(3){}};然后classC:publicB{};会(出乎意料地)编译,但是classC:publicB{public:C(){}};无法按预期编译。使用“g++(GC