我正在开发一个跨平台代码库,其中初始工作是使用MSVC2010编译器完成的。后来我在Linux上使用GCC(4.7)编译它。在许多情况下,我收到:“没有匹配的调用函数..”GCC中的错误。我注意到它主要在方法参数是非常量引用时提示。例如:voidMyClass::DoSomeWork(ObjectSP&sprt,conststd::stringsomeName,conststd::stringanotherName,conststd::stringpath,intindex){sprt->GetProp()->Update(path,false);}一旦我将方法更改为:voidMyCl
在代码中有两个映射。一个存储对和另一个存储,其中值是具有5个变量的类,数据类型为字符串、整数、字符串、整数、整数。但是在插入第二个映射期间,我收到错误g++错误:尝试在map中插入时,'__x如何解决。classValues{private:std::stringC_addr;intC_port;std::stringS_addr;intS_port;intC_ID;public:Values(std::string,int,std::string,int,int);voidprintValues();};Values::Values(std::stringCaddr,intCport
我有一个片段:enumclassEC{a,b};structB{constexprB(ECec):ec_(ec){}ECec_;};structA_base{constexprA_base(Bb):b_(b){}Bb_;};structA:A_base{staticconstexprBbbb=EC::a;constexprA(Bbbbb):A_base(bbbb){}};intmain(){Aa1(A::bbb);//1Aa2{A::bbb};//2Aa3=A::bbb;//3Aa4={A::bbb};//4}它在支持c++17的现代编译器中编译良好。使用c++11和c++14标准支持
我在查看C++的GCC手册时,发现了以下引述:Version0referstotheversionconformingmostcloselytotheC++ABIspecification.Therefore,theABIobtainedusingversion0willchangeindifferentversionsofG++asABIbugsarefixed.(source)可以看出,上述段落引用了某种看似标准的C++ABI。然而,据我了解,不存在这样的ABI。这段话在说什么?一个好的答案将给出尽可能详尽的解释。将“C++ABI规范”放入我首选的搜索引擎中没有任何用处。
最早是什么GNUGCC(g++)版本支持TR1externtemplates?比如4.0版本已经支持了吗? 最佳答案 您可以找到支持的C++-0x功能列表以及支持它们的G++版本here.列中有一个简单的是,所以我假设它们是4.3或可能更早的版本。 关于c++-哪个版本的GNUGCC支持TR1外部模板?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/629865/
我们可以使用typeof运算符获取gcc中函数返回的类型,如下所示:typeof(container.begin())i;是否可以对接受一些参数但不提供参数的函数做类似的事情?例如。当我们有功能时:MyTypefoo(int,char,bool,int);我想检索这个“MyType”(可能使用typeof运算符)假设我只知道函数的名称(“foo”)并且不知道它使用的参数。可能吗? 最佳答案 typeof是非标准扩展,因此如果您希望代码可移植,请不要使用它。它的语法是typeof(expression),所以你需要给它一个调用函数的表
考虑以下代码templateTexponentiel(Tval,unsignedn){Tresult=one;unsignedi;for(i=0;i(2.0f,3);cout编译器告诉我这个没有匹配函数来调用'exponentiel(float,int)'为什么?奇怪的是exponentiel与int一起使用。 最佳答案 问题出在模板参数列表中的Tone和1.0上。您不能拥有浮点类型的非类型模板参数,也不能将浮点值作为模板参数传递。这是不允许的(据我所知,没有充分的理由不允许这样做)。g++在这里的错误信息是相当无用的。Visual
缩小的概念似乎很简单。但是,有人可以解释为什么下面的某些代码会导致“缩小”编译器错误而其他代码不会吗?这段代码会产生预期的错误:constexprinta=255;unsignedcharb=a;//OKunsignedcharc=a+1;//Error...expected此代码不会产生错误,但可能没问题:intd=256;unsignedchare=d;//MaybeOKbecause'd'isnotconstexpr这段代码应该会产生错误(除非我遗漏了什么):intf=42.0;//MaybeOKbecausenofractionalpartintg=42.1;//OK...sh
我看到了一个带有C++共享库的GCC链接,但我无法自己复制它。所以首先我创建了一个带有测试函数的C++库:g++-shared-olibtest.sotest.c然后我有一个测试主函数,它调用库函数并像这样编译它gcc-oprog.outmain.c-L.-ltest然后我收到错误undefinedreferenceto'testfunc'我认为这是由库中的不同引用引起的...C将函数命名为testfunc,而C++将函数命名为[somestuff]__testfunc[maybeagainsomestuff]。我也试过用gcc-oprog.outmain.c-l:libtest.so
我曾经使用MicrosoftVisualStudio2005编写C++代码,其中的自动缩进行为非常好。但是当我尝试使用Code::Blocks时,我意识到其中的自动缩进行为很糟糕。例如困扰我的事情之一:for(inti=0;i对于if和while也是一样的有什么方法可以改变Code::Blocks中自动缩进的行为,使其与MicrosoftVisualStudio自动缩进一样好? 最佳答案 首先,确保启用智能缩进(设置->编辑器->智能缩进)。它在Ubuntu上仍然对我不起作用,但安装codeblocks-contrib包sudoap