Outer.hpp:classOuter{classInner{Inner(){}};staticInnerinner;}Outer.cpp(在顶层,例如不在函数体内):Outer::InnerOuter::inner;我收到以下错误:errorC2248:'Outer::Inner::inner':cannotaccessprivatememberdeclaredinclass'Outer::Inner'我没有使用完全符合C++11(VisualStudio2010)的编译器,因此无法在声明时定义字段。 最佳答案 诀窍是让Oute
这个问题在这里已经有了答案:WhycanIuseautoonaprivatetype?(5个答案)关闭9年前。让我们考虑下一段代码:#include#include"mydemangled.hpp"usingnamespacestd;structA{private:structB{intget()const{return5;}};public:Bget()const{returnB();}};intmain(){Aa;A::Bb=a.get();cout编译器(gcc4.7.2)大声说A::B是私有(private)的。好的。所以,我更改代码:intmain(){Aa;cout它不会大
不幸的是,我有一个基本的C++问题让我感到困惑。最近我看到一篇文章使用向下转换来访问类的私有(private)成员。我的问题是它为什么有效?鉴于我有一个父类P和一个类型为dummy*的私有(private)成员m_p然后使用的方法是创建一个hack类hackP,如下所示:classhackP:publicP{public:dummy*m_p;};显然可以使用如下代码片段访问classP私有(private)成员m_pPparent=...;hackP*hp=(hackP*)&parent;//accessparentm_pashp->m_p如有任何帮助,我们将不胜感激。
有没有办法为私有(private)类专门化一个函数(比如,std::swap)?例如,当我测试这个时:#includeclassOuter{structInner{inta;voidswap(Inner&other){usingstd::swap;swap(this->a,other.a);}};public:staticvoidtest();};namespacestd{templatevoidswap(Outer::Inner&a,Outer::Inner&b){a.swap(b);}}voidOuter::test(){usingstd::swap;Innera,b;swap(a
这在Java中是不允许的:classA{publicvoidmethod(){}}classBextendsA{privatevoidmethod(){}}它会产生一个编译错误:error:method()inBcannotoverridemethod()inAattemptingtoassignweakeraccessprivileges;waspublic然而,这在C++中是允许的:classA{public:virtualvoidmethod(){}};classB:publicA{private:voidmethod(){}};intmain(void){A*obj=newB(
我在类定义中看到了多个public和private关键字,如下例所示:classmyClass{public:voidfunc1(){}public:voidfunc2(){}private:intx;inty;private:intz;intbaz;};这个(如果有的话)的实际用途是什么?是否存在这可能有用的任何情况? 最佳答案 Isthereanysituationinwhichthiscouldbeuseful?我能想到一种情况,否则会很成问题:classmyClass{public:voidfunc1(){}public:v
我确实需要测试C++类的私有(private)成员方法。因为它是私有(private)方法并且我不想将它更改为protected,所以我不能通过创建子类并添加using声明来使其公开。所以如果我定义一个宏PRIVATE来替换private关键字。这是解决这个问题的好方法吗?#if__UNITTEST__#definePRIVATEpublic#else#definePRIVATEprivate#endifclassA{PRIVATE:voidf();}; 最佳答案 使用宏来改变C++关键字的含义是一个极其糟糕的主意。它不仅会使您的读
我有两个函数,它们是“Data”类的私有(private)成员:classDate{private:boolleapYear(inty);voidfillDate(intd,Monthm,inty);};那么,在哪里定义这个函数最好:在类定义中;在类外的头文件中;还是在“.cpp”文件中? 最佳答案 你可以在这里选择。以下是一些可以让您下定决心的想法:内联速度不再是问题,因为编译器现在擅长链接时优化。因此,性能不应成为此处的决定因素(编译速度也很重要,但这是另一袋蠕虫)。在类内部定义的小型内联成员函数可能是“记录”类所做的事情的简单
这是一个演示我的问题的小例子:classFoo{private:intx;voidy(){classBar{public:Bar(Foo*foo){foo->x=3;}};Barbar(this);}};类Foo,在其成员函数y中定义的类试图访问其私有(private)成员x。这是允许的吗?VisualStudio2013可以编译它,但IntelliSense似乎认为私有(private)成员无法访问,并且在嵌入类方法中键入foo->时不会列出它们。 最佳答案 代码有效。N4140[class.access]/2:Amemberof
在一个类中,我有一个静态成员代表该类的单例实例:classA{public:staticconststd::shared_ptrINSTANCE;private:A();};为了防止更多实例,我将构造函数设为私有(private)。现在我无法初始化静态变量,因为初始化程序无法访问私有(private)成员。这是我在.cpp文件中使用的代码:conststd::shared_ptrA::INSTANCE=std::make_shared();工厂方法也无济于事,因为它也必须是公开的。我还能做些什么来完成这项工作?注意:如果可能,我想避免使用典型的staticget()方法。