jjzjj

aggregate

全部标签

c++ - 错误 : aggregate 'first one' has incomplete type and cannot be defined

我写了这个头文件(header1.h):#ifndefHEADER1_H#defineHEADER1_Hclassfirst;//intsumm(inta,intb);#endif和这个源文件(header1.cpp和main.cpp):#include#include"header1.h"usingnamespacestd;classfirst{public:inta,b,c;intsum(inta,intb);};intfirst::sum(inta,intb){returna+b;}#include#include"header1.h"usingnamespacestd;firs

c++ - 如何实现 array::max_size()?

我正在构建自己的array用于娱乐和教育的类模板。C++0x标准草案规定了一个成员函数max_size()对于所有容器为distance(begin(),end())“为了尽可能大的容器”。如何为数组实现这个成员函数?我只是返回std::numeric_limits::max()吗?,还是结果应该取决于元素类型?嗯,都是std::array来自当前的g++和boost::array返回n来自max_size():#include#include#includeintmain(){std::arrayfoo;std::coutbar;std::cout 最佳答

c++11 聚合初始化之前的值初始化

我试图理解@bolov对问题Deleteddefaultconstructor.Objectscanstillbecreated...sometimes的第一个接受的答案[1]我好像在那里发现了一个错误,所以它搞砸了整个解释。@bolov解释了为什么这段代码在c++11中成功编译:场景Astructfoo{foo()=delete;};//AllbellowOK(noerrors,nowarnings)foof=foo{};foof={};foof{};//willuseonlythisfromnowon.为什么这段代码无法在C++11中编译:场景Cstructfoo{foo()=de

c++ - 聚合初始化异常

在C++14(gcc6.3)中,我有以下代码:#include#include#includestructA{inta1;inta2;};structB{intb1;std::shared_ptr>Alist;};structC{std::shared_ptrb;std::shared_ptr>Alist;};std::shared_ptr>makeListA(){std::vectortoto={{0,1},{2,3}};returnstd::make_shared>(toto);}std::shared_ptr>makeListAWithException(){throwstd::

c++ - std::reverse_copy "error: function call has aggregate value"

#include#include#include#includeusingnamespacestd;intmain(){intarrA[]={1,2,3,4,5,6,7,8,9};vectorvecIntA(arrA,arrA+sizeof(arrA)/sizeof(arrA[0]));vectorvecIntB(vecIntA.size());//copy((vecIntA.rbegin()+3).base(),(vecIntA.rbegin()+1).base(),vecIntB.begin());//OKvector::iterators=(vecIntA.rbegin()+3)

c++ - 使用花括号初始化临时聚合对象

假设我有一个类:classAggregate{public:intx;inty;};我知道如何使用大括号初始化一个对象:Aggregatea1={1500,2900};但是我找不到合适的语法来创建临时对象并将其作为参数传递给某些方法,例如:voidfrobnicate(constAggregate&arg){//dosomething}//...frobnicate(Aggregate{1500,2900});//whatshouldthislinelooklike?最简单的方法是将构造函数添加到Aggregate类,但假设我无权访问Aggregateheader。另一个想法是编写某种

c++ - 我可以在 C++ 中创建一个匿名的、大括号初始化的聚合吗?

可以创建一个通过构造函数参数初始化的匿名对象,例如在下面的return语句中。structS{S(inti_,intj_):i(i_),j(j_){}inti,j;};Sf(){returnS(52,100);}intmain(){cout但是,是否可以类似地创建一个用大括号初始化器初始化的匿名聚合?例如,是否可以将下面的f()主体压缩为一个没有“s”的return语句?structS{inti,j;};Sf(){Ss={52,100};returns;}intmain(){cout 最佳答案 您不能在当前版本的C++中使用。你将能

c++ - 推断类型并省略移动/复制构造函数调用的元组聚合构造?

考虑以下mypair类(我不确定这是否是最好的方法,但它似乎有效):#includestructA{A(){}A(constA&){std::coutstructmypair{T0x0;T1x1;};templatestructget_class{};templatestructget_class{staticT0&get_func(mypair&x){returnx.x0;}staticconstT0&get_func(constmypair&x){returnx.x0;}staticT0&&get_func(mypair&&x){returnstd::move(x.x0);}};t

C++ 聚合没有虚函数?

在C++中,聚合是(取自语言规范的8.5.1p1)anarrayoraclass(Clause9)withnouser-providedconstructors(12.1),noprivateorprotectednon-staticdatamembers(Clause11),nobaseclasses(Clause10),andnovirtualfunctions(10.3).因此,#1不是聚合,但#2是聚合。为什么#1也不是聚合?structA{virtualvoidbark(){}inta;};//#1structB{Ab;};//#2 最佳答案

c++ - 为什么我不能像这样淡化 std::array?

这个问题在这里已经有了答案:C++11:Correctstd::arrayinitialization?(5个答案)关闭6年前。为什么我不能像这样淡化std::array?#includestructPoint{floatx;floaty;};intmain(){std::arraym_points{{1.0f,1.0f},{2.0f,2.0f},{3.0f,3.0f}};}这样做我得到错误:error:toomanyinitializersforstd::array但它是这样工作的:std::arraym_points{Point{1.0f,1.0f},Point{2.0f,2.0f