草庐IT

模板对象的 C++ 继承(G++ 编译器)

#include#include#includeusingnamespacestd;classCFirstLevel{public:CFirstLevel(conststring&_name):name(_name){}//...protected:stringname;};templateclassCSecondLevel:publicCFirstLevel{public:CSecondLevel(conststring&_name):CFirstLevel(_name){}virtualvoidPushBack(T)=0;virtualvoidPrint(intI){coutdat

c++ - g++ 和 clang++ - 删除重载转换运算符歧义获取的指针

我试图发布此代码作为对thisquestion的回答,通过制作这个指针包装器(替换原始指针)。这个想法是将const委托(delegate)给它的指针,这样filter函数就不能修改值。#include#includetemplateclassmy_pointer{T*ptr_;public:my_pointer(T*ptr=nullptr):ptr_(ptr){}operatorT*&(){returnptr_;}operatorTconst*()const{returnptr_;}};std::vector>filter(std::vector>const&vec){//*vec.

c++ - 如何阻止 g++ 链接不需要的异常处理代码?

我正在使用为arm-eabi编译的GCC/G++开发嵌入式应用程序。由于资源限制,我试图禁用标准C++异常处理。我正在用“-fno-exceptions”编译代码-nostartfiles-ffreestanding”。当一个类的全局实例存在,并且该类包含另一个类的实例作为成员时,就会链接到很多异常处理代码。这不会太糟糕,除了它也带来了在很多stdio的东西中,比如printf、fopen、fclose和其他FILE函数。此应用程序没有文件系统,即使有,这些函数也会浪费太多代码空间。我知道,即使使用-fno-exceptions,G++也会在使用异常的operatornew中链接,因为

c++ - 使用 g++ 编译 C++ 时出现 'hides constructor for' 警告是什么意思?

使用以下代码:#includestructmy_struct{inta;intb;my_struct();};my_struct::my_struct(void){printf("constructor\n");}voidmy_struct(void){printf("standardfunction\n");}intmain(intargc,char*argv[]){structmy_structs;s.a=1;s.b=2;printf("%d-%d\n",s.a,s.b);return0;}我在使用g++-Wshadowmain.cpp编译时收到警告:main.cpp:15:20:

c++ - G++ 找不到 boost 库

我不擅长命令行编译。我的问题是无法编译简单的项目,这取决于Boost。以下是我的尝试记录:$g++-Walltest.cpp-omain/tmp/ccCTvBYE.o:Infunction`__static_initialization_and_destruction_0(int,int)':test.cpp:(.text+0x6b):undefinedreferenceto`boost::system::generic_category()'test.cpp:(.text+0x77):undefinedreferenceto`boost::system::generic_catego

c++ - 我怎样才能让 g++ 模仿 MSVC++ 的模板实例化行为?

我正在尝试将我自己的库从VisualStudio移植到GNU/Linux上的g++,但我遇到了一些模板编译问题。事实上,在VisualC++中,只有在代码中明确使用模板时才会生成模板,而g++似乎(从我的错误来看)在模板首次使用之前评估模板的内容。这会导致以下错误:error:incompletetype‘X’usedinnestednamespecifier...因为我在模板代码之后而不是之前包含了一些类。由于交叉使用冲突,我这样做。总而言之,VisualC++似乎不会尝试在使用时解析模板的内容,而g++会尽快解析。classMyClass;templatevoidfunc(MyCl

c++ - 是否存在任何情况下有效的 C 代码无法使用 g++ 正确编译

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:“CsubsetofC++”->Wherenot?examples?我知道C是C++的一个子集(即不存在不是有效C++代码的有效C代码)。我的问题是g++是否与所有C代码完全兼容。例如,将g++-otestingtest.c生成一个相同的二进制文件给gcc-otestingtest.c在所有情况下?更具体地说,如果他们不总是创建相同的二进制文件,那么有什么理由认为这可能是个问题吗?如果我不确定代码,始终使用g++是否安全?

c++ - 错误 "' fdopen' was not declared"found with g++ 4 that compiled with g++3

我的代码可以用g++版本3.something愉快地编译。然后我想构建一些其他代码,其中包含C++11符号,所以我升级到g++4.7。现在我的原始代码无法构建。我收到错误:'fdopen'未在此范围内声明根据手册页,fdopen()在我包含的stdio.h中声明。我不确定它是否相关,但我在Cygwin环境中工作。我使用的g++的确切版本是Cygwin提供的版本4.7.2。自从我切换编译器后,我没有更改此代码,我可以肯定地确认它已构建并且我的测试代码运行并通过了以前的编译器。根据要求,演示问题的示例代码:#include#include#include#includeintmain(in

c++ - MSVCC/g++/icc 中 std deque/vector 之间的不同行为

我有一段非常简单的代码;#include#includeusingnamespacestd;classA{public:A(){};~A(){};dequemy_array;//vectormy_array;};intmain(void){}如果我在Linux上同时使用g++和icc/icpc编译这段代码,它编译得很好,即使使用-Wall也不会给出任何警告。如果我将双端队列交换为vector,情况是一样的。我想在Windows上使用MSVCC(cl)构建此代码,但不幸的是它会抛出错误c2027:errorC2027:useofundefinedtype'A'但是,如果我将std::de

c++ - 使用 'g++' 结果为 "warning: will never be executed"

我继承了一个C++项目。我在RHELbuild5.5与GCC4.1.2通过makefile。该项目很大(数百个文件),总的来说代码还不错。然而,在编译过程中,我经常收到一个GCC警告,上面写着(prefix"/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2"):/bits/allocator.h:Inconstructor‘std::allocator::allocator()[with_Tp=char]’:/bits/allocator.h:97:warning:willneverbeexecuted