草庐IT

public_private

全部标签

C++ 未解析的外部符号(public static int)

当我尝试编译它时,我得到了这个链接器错误:LNK2001unresolvedexternalsymbol"public:staticintHooksXD::night"(?night@HooksXD@@2HA)Theheaderisthis:classHooksXD{public:staticvoidXD3();staticintnight;staticintnight2;};变量是公共(public)的而不是私有(private)的,因为我需要从不在同一个类中的其他voids访问它们。cpp文件:HooksXDlmao;voidHooksXD::XD3(){//thisvoidwil

C++从静态成员函数更改私有(private)成员变量

我在通读我的代码时注意到我有一个静态成员函数,它通过指向所述类实例的指针更改其类的私有(private)成员。它编译和运行没有问题,但我只是想知道以这种方式从成员但静态函数编辑私有(private)变量是否符合犹太洁食标准,或者我是否应该实现公共(public)setVar函数。请注意,我并不是要通过编辑静态函数的成员变量来绕过标准编码实践-该函数必须是静态的,以便它可以使用POSIXpthread库作为线程运行。干杯,怀亚特 最佳答案 是的,这是有效的。虽然在大多数情况下拥有非静态成员更好,但有时在需要将函数指针传递给外部库的情况

c++ - 私有(private)继承、友元和异常处理

当A类私有(private)继承自B类时,意味着B是A的私有(private)基类子对象。但对friend来说不是,对friend来说是公共(public)子对象。当有多个catch处理程序时,第一个匹配的处理程序(即,如果异常类型可以隐式转换为处理程序的参数类型)被调用。那么有人会向我解释为什么下面的代码不能像我预期的那样工作吗?此行为是标准有意为之还是MSVC错误?classA{};classB:A//privateinheritance{friendvoidg();};voidf(){Bb;//A*pa=&b;//error,conversionexists,butisinacc

c++ - 将公共(public) block 提取到 C++ 中的函数中

在处理C++代码时,我经常遇到一些问题。假设我有一个方法执行X、Y,然后执行Z。现在我想介绍另一个应该执行X、Y'、Z的方法。如果那是普通的旧C代码,那么我会使用通用代码创建函数X()和Z(),将它们声明为static以便编译器现在可以在需要时内联它们,因为此“模块”之外的代码无法调用它们。作为API一部分的方法将如下所示intM(args){X(foo);//thatcoulde.g.be"checkargsarevalid"./*herecomesM-specificcode*/Z(bar);//thatcoulde.g.be"update_state"}intM2(args){X

c++ - 未使用的私有(private)虚拟方法是否允许在不破坏 ABI 兼容性的情况下进行 future 扩展?

我正在开发一个共享库。假设我有以下类定义:classMyClass{public://publicinterfaceprivate:virtualvoidfoo1(int);virtualvoidfoo2(int,bool);virtualvoidfoo3(double);virtualvoidreserved1();virtualvoidreserved2();virtualvoidreserved3();classImpl;Impl*impl_;};reserved#虚拟方法不会在客户端代码中被覆盖,也不会从任何地方调用。它们充当future扩展的占位符。假设我将其中一个保留方法替

c++ - 使用 Doxygen 单独提取类的公共(public)方法列表

我正在为我的C++项目使用Doxygen,该项目将托管在github中。我想在自述文件中包含一个类的方法列表,并且我正在考虑使其自动化的方法。我将在repo中包含整个生成的html页面,但我认为通过在自述文件中包含主类的成员来提供API的概念会很好。到目前为止,我找不到生成Markdown文件的方法。我的下一个想法是编写一些shell脚本,它会自动复制成员列表并将其包含在自述文件中,为此我需要单独生成一个类的成员函数列表。是否可以配置doxygen来单独输出一个类的成员列表? 最佳答案 我最近有一个项目,我想将几​​个函数确定为公共

c++ - unique_ptr 成员,私有(private)复制构造函数与移动构造函数

给定多个派生类的基类,目标是创建一个包装类,允许STL容器查看具有基接口(interface)的对象,尽管实际上可能会将不同的派生类添加到容器中。(参见Retrievedatafromheterogeneousstd::list)。经过一些修补,我提出了一个新的派生类,它是对基类的unique_ptr的包装。但是,移动构造函数让我感到困惑。classBase{friendclassBaseWrapper;virtualBase*clone()const=0;public:virtual~Base(){}//...publicinterface};classDerived:publicB

c++ - 错误 C2248: 'std::future<Worldlet>::future':无法访问类 std::future<Worldlet> 中声明的私有(private)成员

当我尝试编译此结构时出现错误C2248:structLoadingWorldlet{intx,z;std::futureresult;};我尝试将结果作为引用,但随后出现错误C2512。当我修复该错误时,我会在xutility中得到C2582。有什么方法可以修复第一个错误而不得到后两个错误,或者有什么方法可以同时修复后两个错误? 最佳答案 替换std::future与std::shared_future可能会解决您眼前的编译问题。但问题的根源在于您可能只想要std::future的一个消费者.您正在复制struct某处,要求两个fu

c++ - 最低公共(public)祖先优化

我有一个包含元素[0到N-1]的基本数组,其中每个元素都是一个结构,其索引始终指向数组中较早的位置.有一次,作为一个更大算法的一部分,我想在节点X和之后的任何节点之间找到一个特定的C最低共同祖先。intLCA(a,b){while(a!=b){if(a>b){a=nodes[a].parent;}else{b=nodes[b].parent;}}returna;}for(y=x+1;y上面的代码真的是伪代码。通过在使用时生成查找表,我设法稍微提高了LCA()的性能。像这样:intLCA(a,b){if(lookup[a,b]){returnlookup[a,b];}oa=a;ob=b;

c++ - 为什么不允许在 const 非 volatile 成员函数上消除公共(public)子表达式?

C++的目标之一是允许用户定义类型的行为与内置类型一样好。这似乎失败的一个地方是编译器优化。如果我们假设const非volatile成员函数在道德上等同于读取(对于用户定义的类型),那么为什么不允许编译器消除对此类函数的重复调用呢?例如classC{...public:intget()const;}intmain(){Cc;intx{c.get()};x=c.get();//whynotallowthecompilertoeliminatethiscall}允许这样做的论点与复制省略的论点相同:虽然它改变了操作语义,但它应该适用于遵循良好语义实践的代码,并在效率/模块化方面提供实质性改