jjzjj

Definition

全部标签

c++ - 析构函数 : triviality vs implicit definition

根据我对标准的理解,普通析构函数是一种隐式声明的析构函数,其类只有基本和非静态成员以及普通析构函数。鉴于此定义的递归性,在我看来,唯一的“递归停止”条件是找到具有非隐式声明的析构函数(即用户声明的)的基类或非静态成员。如果那是对的,那应该意味着一个普通的析构函数是一个“不需要做任何事情”的析构函数,因此它将被声明(隐式地)但不被定义。换句话说:根据标准定义,隐式定义析构函数(即“它做某事”)不能是微不足道的说法是否正确?很抱歉提出这种愚蠢的问题,但我想澄清一下我的想法...... 最佳答案 没有。隐式定义的平凡析构函数根据定义是平凡

C++ 重载运算符 '>>'

我一直在查看大量不同的示例和解释,但没有一个能真正回答我正在寻找的内容。我有三个类,每个类都有一个名为connect的方法:classfoo{...}voidfoo::connect(barbr){...}classbar{...}bar&bar::connect(bazbz){...}classbaz{...}baz&baz::connect(){...}在我的主课中,我像这样“连接”它们:foo.connect(bar);bar.connect(baz);baz.connect();或:foo.connect(bar.connect(baz.connect()));(我知道这是简要

c++ - 错误 : C2988: unrecognizable template declaration/definition

我的两个模板的标题中出现错误。两者都有类似的声明和定义如下:templatevoidsetVideoCodecOption(T1AVCodecContext::*option,T2(CR2CVideoCodecSettings::*f)()const);templatevoidEncoderPrivate::setVideoCodecOption(T1AVCodecContext::*option,(CR2CVideoCodecSettings::*f)()const){T2value=(m_videoSettings.*f)();if(value!=-1){m_videoCodecC

c++ - C 和 C++ 中的宏重新定义

我知道这段代码在C和C++中都有效:#defineFOO0#defineFOO0ISO/IEC14882:201116.3Macroreplacement[cpp.replace]2Anidentifiercurrentlydefinedasanobject-likemacromayberedefinedbyanother#definepreprocessingdirectiveprovidedthattheseconddefinitionisanobject-likemacrodefinitionandthetworeplacementlistsareidentical,otherw

c++ - shared_ptr 中对 const int 的 undefined reference

我有一个配置类//config.hppclassConfig{public:staticconstexprinta=1;staticconstexprintb=1;}并包含在main.cpp中//main.cpp#include"config.hpp"intmain(){std::coutstream=std::make_shared(Config::a);//compileerror}编译器说未定义对Config::a的引用它在使用cout时有效,但在shared_ptr构造函数中时无效。我不知道为什么会这样。 最佳答案 请注意s

c++ - 为什么必须定义未使用的虚函数?

与未使用的普通函数不同,未使用的虚函数仍必须定义,我觉得很奇怪。我对创建类对象时创建的隐式vtables和vpointers有所了解-这在某种程度上回答了问题(必须定义函数以便指针指向可以定义虚函数)但这将我的查询推得更远。如果根本不可能调用虚函数,为什么还需要为函数创建一个vtable条目?classA{virtualbooltest()const;};intmain(){Aa;//error:undefinedreferenceto'vtableforA'}即使我声明了A::test()它从未在程序中使用过,但它仍然会抛出错误。编译器是否可以不运行程序并意识到从未调用过test()

c++ - 错误 : definition of implicitly declared copy constructor

我目前正在处理的QtC++项目有问题。这是我要介绍的一个新部分,但我发现它有点令人困惑。我创建了一些由股票、债券和储蓄类继承的Assets类。这一切都很好。然后我创建了一个名为AssetList的类,它派生了QList,这个类是我发现问题的地方。这是我目前的代码。资源列表.h#ifndefASSET_LIST_H#defineASSET_LIST_H#include"Asset.h"#includeclassAssetList:publicQList{public:AssetList(){}~AssetList();booladdAsset(Asset*);Asset*findAsse

c++ - 相互递归类是否可能?

我读了howthiscanbemadetowork使用前向声明。classA{public:B*objB;voidfoo(){}}classB{public:A*objA;voidfoo(){}}只是想确认这种设计是否可行?classA{public:BobjB;voidfoo(){}}classB{public:AobjA;voidfoo(){}}PS:如果有人还可以解释为什么/为什么这在逻辑上是可能的类,而不是仅仅在语言方面,比如引用一些例子。这在类方面究竟意味着什么? 最佳答案 第二个例子是不可能的。它说分配给A的空间包含B的

C++ 错误 : definition of implicitly-declared

我正在用C++编写这个链表程序当我测试程序时,我得到了错误linkedlist.cpp:5:24:error:definitionofimplicitly-declared'constexprLinkedList::LinkedList()'LinkedList::LinkedList(){这是代码链表.h文件:#include"node.h"usingnamespacestd;classLinkedList{Node*head=nullptr;intlength=0;public:voidadd(int);boolremove(int);intfind(int);intcount(i

c++ - 声明和带有定义的声明。为什么不允许这样做?

我想知道,为什么不允许这样写:structfoo{voidbar();//declarationvoidbar(){std::cout该函数声明了两次(我认为这没问题)并定义了一次。但是,我的编译器提示:decldef.cxx:7:10:error:'voidfoo::bar()'cannotbeoverloaded为什么不允许?为什么我的编译器(g++4.7.2)将此解释为重载?PS:我知道如何写“正确的方式”,但我只是想知道,为什么上面是错误的。 最佳答案 来自§9.3Exceptformemberfunctiondefinit