草庐IT

c++ - AVR/Linux GCC C++ 项目的常用常量

我正在为Linux+AVRArduino项目创建软件。显然,整个工作在Eclipse中分为几个项目(我没有使用ArduinoIDE)。我想为所有这些项目使用常见的、主要是字符串的常量。我还必须保留微Controller的RAM,以便需要编译时常量。我如何最好地实现它?我的想法是为这些常量创建一个单独的、仅包含标题的项目。使用:classA{public:staticconstchar*constSTRING;staticconstunsignedcharBOOL;};不够好,因为我希望能够像这样连接字符串常量:classA{public:staticconstchar*constSTR

c++ - gcc 4.6 编译器的奇怪行为

这段代码:templateclassInt_Core{static_assert(Check_Range::check(Min,std::numeric_limits::min()),"INCORRECTMinrange.");static_assert(Check_Range::check(Max,std::numeric_limits::max()),"INCORRECTMaxrange.");}我得到的错误是在第二个static_assert上告诉我使用了非常量表达式。但是如果我在第二个断言中将“Max”更改为“Min”,它确实可以毫无问题地编译。怎么回事?错误:错误:静态断言的

c++ - 如何制作适用于 gcc 4.6 的递归 boost::variant?

我正在解码bencode,并且有一些代码适用于gcc4.4。但是最近升级到gcc4.6后,此代码不再生成:#ifndefBENCODE_VALUETYPES_H#defineBENCODE_VALUETYPES_H#include#include#include#includenamespacebencode{typedefboost::make_recursive_variant,std::map>::typeValue;typedefstd::mapValueDictionary;typedefstd::vectorValueVector;};#endifg++给出了这个错误信息:

c++ - 具有非静态 lambda 成员的类不能使用默认模板参数?

这个小测试程序:#include//template//structc{std::functionf=[](inti){returni+i;};};intmain(){};Clang-3.2编译正常,但是从GCC4.7.1和4.8我得到了奇怪的错误:t.cc:6:31:error:defaultargumentfortemplateparameterforclassenclosing‘struct__lambda0’functionf=[](inti){returni+i;};^这是没有人知道的那些晦涩难懂的C++规则异常之一,还是GCC错误?编辑看起来像一个错误。我已经提交了bugr

c++ - 在 GCC 4.7.2 和 Clang 3.2 中显然缺少 getline() 的重载,将 RRef 流式传输

我在尝试将getline()与临时流对象一起使用时遇到了意外的编译错误:#include#include#includeusingnamespacestd;intmain(){stringinput="hello\nworld\nof\ndelimiters";stringline;if(getline(stringstream(input),line))//ERROR!{cout看起来不存在接受对流对象的右值引用的getline()重载。如果我将main()更改为使用左值,它会按预期编译和运行:intmain(){stringinput="hello\nworld\nof\ndeli

c++ - GCC- 无效使用 Register

我正在VS2012和GCC(CodeBlocks)下为Windows编译一个项目。在VS2012上一切正常。在GCC下,我得到以下编译错误:C:\Users\Piotrek\AppData\Local\Temp\ccfdl0Ye.s|164|Error:invaliduseofregister|C:\Users\Piotrek\AppData\Local\Temp\ccfdl0Ye.s|166|Error:invaliduseofregister|C:\Users\Piotrek\AppData\Local\Temp\ccfdl0Ye.s|221|Error:invaliduseofr

c++ - GCC 4.7.2:带有指向成员函数指针的 std::thread

正在为thisquestion写测试代码我发现下面的注释行无法在GCC4.7.2上编译:#include#includestructS{voidf(){std::cout但cppreference似乎声称“this”参数可以等效地作为对象、对象引用或对象指针传递:IffispointertoamemberfunctionofclassT,thenitiscalled.Thereturnvalueisignored.Effectively,thefollowingcodeisexecuted:(t1.*f)(t2,...,tN)ifthetypeoft1iseitherT,referen

c++ - 为什么没有隐式类型转换的警告?

我终于在我的程序中找出了一个错误,它是由返回类型的隐式类型转换引起的。即使使用g++-Wall也不会对此发出警告。不知道有没有办法快速找出这种无脑错误?#include//returntypeshouldbeint,butIwroteboolbymistakeboolfoo(intx){returnx;}intmain(){for(inti=0;i 最佳答案 这是正确的代码。如果(i)i的类型int也是正确的。n33764.12/1Aprvalueofarithmetic,unscopedenumeration,pointer,or

c++ - GCC 4.8.1、C++11、共享库和异常处理问题

我的项目包括以下内容:我的程序,主要是用C++11编写的(因此尝试在C++03模式下编译它是不切实际的)共享库(https://github.com/SOCI/soci),使用相同的编译器编译SOCI抛出我需要在我的代码中捕获的异常。它曾经与GCC4.7.3一起使用,但现在我已经迁移到GCC4.8.1它不再适用了:异常会通过所有处理程序(包括catch(...))并导致终止:terminatecalledafterthrowinganinstanceof'soci::mysql_soci_error'what():Table'brphrprhprh'doesn'texistThepro

c++ - c_include_path 与 ld_library_path

在Ubuntu12.04或Springdale6.4上,使用gcc和g++,C_INCLUDE_PATH(或CPLUS_INCLUDE_PATH)和LD_LIBRARY_PATH之间有什么区别?LD一个只在运行时使用,另外两个只在编译时使用吗?由于GCC在这些操作系统上似乎忽略了INCLUDE和LIBRARY_PATH环境变量,因此我应该在构建~/.bashrc文件时设置它尽可能跨现代Linux操作系统可移植(实际路径中的模数变化)? 最佳答案 LD_LIBRARY_PATH是一个环境变量,当您启动可执行文件时,它告诉dll加载程序