草庐IT

private_extern

全部标签

c++ - 为什么声明私有(private)基类会使类型名称不可访问?

令我感到惊讶的是,在以下示例中声明Middle的基类私有(private)使得该名称在后续派生中无法作为类型使用。classBase{public:Base(Baseconst&b):i(b.i){}inti;};classMiddle:privateBase{//因此使用g++(Debian6.3.0-18+deb9u1)6.3.020170516...编译g++-std=c++11privateBase.cpp我得到以下诊断信息:privateBase.cpp:15:9:error:‘classBaseBase::Base’isinaccessiblewithinthisconte

c++ - 私有(private)移动构造函数是为了防止移动吗?

C++中的一个常见模式是将复制构造函数设为私有(private):classA{public://...private:A(constA&);};但是下面的代码会编译吗(在C++11/14中):Af();autoa=f();该标准包含有关自动生成移动构造函数的信息。我既无法访问标准,也无法访问实际生成移动构造函数的编译器。我的问题是:我必须写吗classA{public://...private:A(constA&);A(constA&&);};为了防止移动(和operators=类似)? 最佳答案 Butwillthefollow

c++ - 无法访问类 'std::basic_ios<_Elem,_Traits>' 中声明的私有(private)成员

这个特定方法有问题,不知道如何解决!我得到的错误是上面的:"errorC2248:'std::basic_ios::basic_ios':cannotaccessprivatememberdeclaredinclass'std::basic_ios'C:\ProgramFiles\MicrosoftVisualStudio10.0\VC\include\ostream604"我的方法是:ostreamoperator在标题中:friendstd::ostreamoperator关于如何解决这个问题的任何想法?我认为这与通过引用而不是值传递有关...但我有点困惑!

c++ - 我应该在哪里实现这个 "private"辅助函数?

我的类定义分布在头文件和源文件中://T.hppclassT{public:voidfoo();};//T.cppvoidT::foo(){}如果T::foo需要使用一些只对T可见的辅助函数,以下哪个解决方案是最好的吗?1。私有(private)成员(member)//T.hppclassT{public:voidfoo();private:voidhelper();};//T.cppvoidT::foo(){helper();}voidT::helper(){}2。只能在类定义的TU中访问自由函数//T.hppclassT{public:voidfoo();};//T.cppname

c++ - 可以为嵌套的私有(private)类重载 operator<< 吗?

如何为像这样的嵌套私有(private)类重载运算符classouter{private:classnested{friendostream&operator在外部类编译器之外尝试时会提示隐私问题:error:‘classouter::nested’isprivate 最佳答案 你可以制作operatorouter的friend以及。或者您可以完全实现它inline在nested,例如:classOuter{classInner{friendstd::ostream&operator 关

c++ - boost 私有(private)成员的互斥奇怪错误

我有一个奇怪的错误。classINST{public:boost::mutexm_mutex;};std::vectorm_inst;错误C2248:“boost::mutex::mutex”:无法访问在类“boost::mutex”中声明的私有(private)成员参见“boost::mutex::mutex”的声明但是,我的其他类没问题,classVIEW{public:boost::mutexm_mutex;};VIEWm_view;我是不是漏掉了什么?我已经尝试将m_mutex声明为私有(private),但仍然有同样的问题。谢谢。 最佳答案

c++ - 你如何声明一个 extern "C"函数指针

所以我有这段代码:#include"boost_bind.h"#include#include#includedoublefoo(doublenum,double(*func)(double)){return65.4;}intmain(intargc,char**argv){std::vectorvec;vec.push_back(5.0);vec.push_back(6.0);std::transform(vec.begin(),vec.end(),vec.begin(),boost::bind(foo,_1,log));}并收到此错误:returnunwrapper::unwrap

c++成员函数访问私有(private)静态变量?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whatdoesitmeantohaveanundefinedreferencetoastaticmember?如果我在类声明之外实现函数,我不知道为什么会出现错误“对`TT::i'的undefinedreference”?这是代码..classTT{private:staticinti;public:voidt();};voidTT::t(){i=0;}

c++ - #ifdef __cplusplus extern "C"{ #endif 的最佳位置在哪里

我想知道放在哪里比较好#ifdef__cplusplusextern"C"{#endif在C头文件中。在所有其他包含的开头或之后。为什么? 最佳答案 对此没有严格的规定,但要注意以下几点。一般原则是每个头文件都自行处理(并且是自给自足的)。因此,根据这个原则,不需要将头文件包装在extern“C”中,因为头文件中会有一个extern“C”(如果需要的话)。因此,在当前文件中,您可以将它放在其他包含文件之后。但是如果你确实有一大堆标题,你不想添加一个外部“C”,并且想通过一个单独的包含来提供,无论如何,继续把它们包装起来在文件宽外部“

c++ - extern C 不能在类级别使用?

只是想确认在Windows环境下,VSTS2008+C++项目,我们只能将externC应用到函数级别,不能应用到类级别(这样类中的所有成员函数都使用C语言名称修饰)?试了好几种方法,总是编译出错。提前致谢,乔治 最佳答案 您可以通过非常复杂(但完全合法)的hack将extern"C"应用于成员函数:extern"C"typedefintbar_t(intx);structfoo{bar_tbar;//yes,thisdeclaresanonstaticmemberfunction!};intfoo::bar(intx){retur