草庐IT

c++ - 如何在 Qt Creator 中更改/配置所需的编译器?即在 MSVC/Mingw 或 g++/clang++ 之间切换

我知道howtoaddcompilerinQtCreator.但是我的Qt总是选择MSVC编译器。如何设置MinGW(内置或外置)而不是MSVC?找不到任何帖子可以帮助新手了解如何更改所需偏好的编译器。我当前的系统是Windows,但是也欢迎提供有关Linux(g++clang++)的信息。 最佳答案 以下是Qt5.9的方式:在配置新项目时,只选择那些需要的编译器/工具包;对于64位系统,获取latestMinGW并安装在合适的路径上;安装MinGW64时,您可以选择“posixthreads”,而不是“win32threads”以

c++ - g++ 认为我的类声明是 "forward declaration"

这个问题在这里已经有了答案:C++staticpolymorphism(CRTP)andusingtypedefsfromderivedclasses(5个答案)关闭3年前。精简到最低限度,这是我要编译的代码:templateclassB{protected:std::vectorv;public:templatevoidadd(Args...args){this->v.emplace_back(std::forward(args)...);}typenameT::Iget(inti){returnthis->v[i];}};classD:publicB{public:typedefs

c++ - 错误:分配只读位置<未命名>::g_namesmap

我遇到了这个问题标题中提到的错误。代码片段如下所示:namespace{structmyOptVar*g_optvar=0;//Variablethatstoresmapofnamestoindexstd::mapg_namesmap;};voidOptimizations::generate(){//freecurrentoptvarstructurefree(g_optvar);//clearournamesmapg_namesmap.clear();//createnewoptvarstructureconstunsignedintsize=g_items.size();g_op

c++ - g++ 可以检查抛出说明符吗?

关于这个的两个问题:有没有办法强制g++忽略throw说明符?(例如,我记得,VisualStudio会忽略抛出说明符,这与throw()不同)是否有可能强制g++检查抛出说明符是否正确-我的意思是检查(这可以通过one-passcompilers完成)函数是否具有throwspecifiers调用函数,可能只是通过观察他们的throwspecifiers和观察执行throw异常,这将违反说明符?(注意:这不应该监视没有抛出说明符的函数,因为这可能会导致大量警告)编辑:我将为我的第二个问题添加一些示例。假设我们有://sorryforthecodingstylehere,butIdon

c++ - g++ 中的 SGI STL 绳索?

似乎在我的/usr/include/c++/4.5.1/ext/rope(和ropeimpl.h)中有rope的实现。我将它与SGISTL进行了比较,代码似乎与代码库几乎相同。我不知道它的状态或者它是否正常工作。我也不知道这是super陈旧的代码,还是正在进行中的代码无论如何,我还没有找到任何关于如何使用它的引用资料(如果功能正常的话)。你知道我错过了什么吗?有我可以使用的用法示例吗?编辑如果您看到cvshistoryhere,您会看到上次事件是4个月前,看起来不太活跃,但也没有被遗弃。 最佳答案 它直接取自SGI代码,并且仍在维护

c++ - g++即使指定了标题也找不到标题

所以基本上我有一些非常简单的代码,其中包括位于/Users/wen/Projects/include/bigint.我正在用这个编译:g++main.cpp-oMain-I/Users/wen/Projects/include/bigint但它报告了一个fatalerror,它找不到该文件。我做对了吗?谢谢!main.cpp:4:10:fatalerror:'BigIntegerLibrary.hh'filenotfound 最佳答案 尝试#include"BigIntegerLibrary.hh"如果您使用尖括号(#include

c++ - g++ std::bind 错误与 shared_ptr

我无法理解为什么以下代码无法编译。#include#includeclassFoo{public:voidBar(inti){}};voidX(std::function)>f){}intmain(){std::shared_ptrf(newFoo);autof1(std::bind(&Foo::Bar,std::placeholders::_1,1));X(f1);return0;}g++(4.6.3)输出...nfileincludedfrom/usr/include/c++/4.6/memory:80:0,fromtest.cpp:1:/usr/include/c++/4.6/f

c++ - g++ 链接问题 : In function `_start' : (. text+0x20): undefined reference to `main'

我收到对主要错误的undefinedreference-即使我已经定义了主要,并且(AFAICT),我已经正确链接了它。这是我的代码和我使用的命令://################################################//proj1.h#ifndef__SCRATCH_PROJ1_H#define__SCRATCH_PROJ1_HintaddOne(inti);#endif/*__SCRATCH_PROJ1_H*///################################################//proj1.cpp#include"pr

c++ - 为什么 g++(4.6 和 4.7)将这个除法的结果提升为 double ?我能阻止吗?

我正在编写一些模板代码来对同时使用float和double的数值算法进行基准测试,以便与GPU实现进行比较。我发现我的浮点代码速度较慢,在调查使用Intel的VtuneAmplifier后,我发现g++正在生成额外的x86指令(cvtps2pd/cvtpd2ps和unpcklps/unpcklpd)以将一些中间结果从float转换为double然后再返回再次。此应用程序的性能下降了近10%。在使用标志-Wdouble-promotion编译后(顺便说一句,-Wall或-Wextra不包含),果然g++警告我结果正在提升。我将其简化为如下所示的简单测试用例。请注意,C++代码的顺序会影响

c++ - 使用 -g 选项编译但 "Single stepping until exit from function main, which has no line number information"

我在使用gdb时遇到了一些问题。这是我在一个名为main.cpp的文件中的代码#includevoidmyfunc();intmain(){charmsg[]="HelloWorld!";myfunc();std::cout我使用这个命令来编译这段代码:g++-g-Wallmain.cpp-ofoo接下来,我使用了gdb:$gdbfoo(gdb)startTemporarybreakpoint1at0x80487c3Startingprogram:/home/laptop/workspace/fooTemporarybreakpoint1,0x080487c3inmain()(gdb)