草庐IT

c++ - 在 C++11 中哪些临时对象不能用 `someType()` 初始化?

我有一些对类型和初始值进行操作的宏。我需要将初始值vIni转换为vType(vIni总是可转换为vType,有时它有同一类型)。vIni也可能为空,在这种情况下,vType应该未初始化或默认初始化。结果传递给模板化函数。简而言之,templatevoidfoo(constT&o);foo(vType(vIni));foo(vType());必须编译。我已经发现foo(unsignedint())或foo(int*())无法编译,但可以使用typedef解决。还有哪些其他情况(除了带有空格和指针的内置类型)会失败? 最佳答案 简短(稍

c++ - 为什么 int 不能用作返回类型的左值,而用户定义的类可以?

structA{};Af1(){returnA();}intf2(){returnint();}intmain(){f1()=A();//OKf2()=int();//errorC2106:'=':leftoperandmustbel-value}为什么f1()=A();正常而f2()=int();失败? 最佳答案 f1()返回A的实例。由于您没有覆盖复制/移动赋值运算符,因此编译器会为您生成一个。您实际上是在调用成员函数:f1()=A();//callsA&operator=(A&&)第二个不起作用,因为int不是类类型。

c++ - '非静态引用成员,不能使用默认赋值运算符'

当我尝试编译我的代码时出现此错误:非静态引用成员‘Timestep&Timestep::previousTimestep’,不能使用默认赋值运算符我创建了一个Problem,它创建了一个Timestep对此Timestep的引用应该存储在vectorsolution。此外,我想存储对前一个Timestep的引用-对于第一个Timestep来说,这将是对自身的引用......我读到,如果我在一个类中有const成员,我需要定义一个自己的运算符,我试图将其设置为相等。但是,从代码中删除了所有const元素,它仍然不起作用。有什么建议么?非常感谢。classProblem{public:vo

c++ - 不能同时包含 Eigen 和 boost/regex

我可以单独包含每个库,但是一旦我尝试同时包含它们,就会出现大量错误。我正在使用Boostv1_55_0和Eigenv3.2.1。知道可能是什么问题吗?我的包含看起来像这样:#include#include我在下面粘贴了前几个错误,其中有100多个错误。Error1errorC1189:#error:TheEigen/ArrayheaderdoesnolongerexistinEigen3.AllthatfunctionalityhasmovedtoEigen/Core.c:\local\eigen\array81Project12IntelliSense:#errordirective

c++ - 派生类不能使用指向 protected 基类成员的成员指针

includeclassBase{protected:intfoo;intget_foo(){returnfoo;}};classDerived:publicBase{public:voidbar(){intBase::*i=&Base::foo;this->*i=7;printf("foois%d\n",get_foo());}};intmain(){Derivedd;d.bar();}我不明白为什么我的派生类型不能指向基类的protected成员。它有权访问该成员。它可以调用类似作用域的函数。为什么它不能创建一个成员指针?我正在使用gcc4.1.2,但出现此错误:test.cc:I

c++ - Eclipse CDT 索引器不能完全识别 c++11

首先,我知道启用c++11支持的-std=c++11标志以及放置它的位置。我已将-std=c++11附加到Project->Properties->C/C++Build->Settings->ToolSettings->GCCC++Compiler->Miscellaneous->Other标志和编译工作正常。但是索引器不适应,例如,如果我想使用std::map(c++11)的emplace函数,它不会找到放置函数。#includeintmain(){std::mapdata;data.emplace(5,5);我还检查了这些相关问题:EclipseCDTindexerdoesnotk

c++ - 为什么我不能像这样初始化结构?

structEmployee{intage;doublewage;};Employeejoe;joe={2,60.0};//usinginitializationlistinsteadofdoingEmployeejoe={2,60.0}我在VisualStudio2015中遇到编译错误,但能够使用C++版本C++11在代码块中执行 最佳答案 它应该可以工作。复制列表初始化以下是有效的,称为copy-list-initialization:joe={2,60.0};它实际上是右侧正在初始化的临时文件。看看thisanswer.如所提

c++ - 为什么我不能将 assert 与 std::is_same 一起使用?

有人可以向我解释为什么这个代码片段无法正常工作吗?#include#includeusingnamespacestd;intmain(){assert(is_same::value);}编译失败,因为根据编译器:prog.cpp:7:33:error:macro"assert"passed2arguments,buttakesjust1assert(is_same::value);^prog.cpp:Infunction'intmain()':prog.cpp:7:2:error:'assert'wasnotdeclaredinthisscopeassert(is_same::valu

不能在cakeph3中保存mulitple记录

我不能在cakephp3v3.2中保存多个记录。我有一个在大约20行数据上重置为0的字段(见下文)。以下代码不能保存。我没有错误,数据调试是正确的,但是什么也没有发生,没有错误。只是它不会将该字段重置为0。我可以使用以下执行方法使它上班,但是为什么Newentites不起作用?privatefunctiontmpschedules($tmpscheduleStudents=0,$tutorId=0){foreach($tmpscheduleStudentsas$key=>$item)://debug($item);$tmpscheduleStudents[$key]['allocated']=

c++ - 小于运算符不能作为成员函数重载

我想在map中使用我的class作为key,所以我重载了operator+。如果我将它重载为友元函数,它会很好用。当我将它作为类中的成员函数重载时,会导致编译错误。errorC2678:binary'.详细来说,这不会编译,并产生编译错误:西尔.hbooloperatorSyl.cppboolSyl::operator编译时。西尔.hfriendbooloperatorSyl.cppbooloperator我不知道为什么。我知道operator 最佳答案 通常,成员运算符,例如operator不要修改他们操作的对象。如果是这种情况,