草庐IT

c++ - 在 g++ 上无效使用不完整类型

我有两个相互依赖的类:classFoo;//forwarddeclarationtemplateclassBar{public:Foo*foo_ptr;voidDoSomething(){foo_ptr->DoSomething();}};classFoo{public:Bar*bar_ptr;voidDoSomething(){bar_ptr->DoSomething();}};当我用g++编译它时,出现“无效使用不完整类型”的错误,但它在MSVC10中编译得很好。将声明和定义保留在一个头文件中是否可以解决这个问题?(没有cpp文件)如果标准不允许这样做,那么这是MSVC的“错误”或

c++ - g++ 解析错误 ":"

g++报告以下代码的解析错误:classSy_timeLineDelegateScene:publicQGraphicsScene{Q_OBJECTpublic:Sy_timeLineDelegateScene(Sy_animPropertyTimeLine*timeline,Sy_animClock*clock,QObject*parent=nullptr);virtual~Sy_timeLineDelegateScene(){}protectedslots://Parseerrorat":"typedefQMapDelegateTimeLine;...我的类是从QObject派生的

c++ - g++ 会将我的程序与它不使用的库中的类链接起来吗?

我创建了一个简单的静态库,包含在.a文件中。我可能会在各种项目中使用它,其中一些根本不需要90%。例如,如果我想在AVR微型计算机上使用神经网络(它是我的库的一部分),我可能不需要大量其他东西,但是在我的代码中链接这些东西会不会产生一个相当大的文件?我打算像这样编译程序:g++myProg.cppmyLib.a-oprog 最佳答案 G++只会从您的库中提取它需要的目标文件,但这意味着如果使用来自单个目标文件的一个符号,则该目标文件中的所有内容都会添加到您的可执行文件中。一个源文件变成一个目标文件,因此只有在确定需要一起使用时才在逻

c++ - g++ C++0x 枚举类编译器警告

我一直在将C++类型安全伪枚举的可怕困惑重构为新的C++0x类型安全枚举,因为它们方式更具可读性。无论如何,我在导出类中使用它们,所以我明确标记它们要导出:enumclass__attribute__((visibility("default")))MyEnum:unsignedint{One=1,Two=2};用g++编译它会产生以下警告:typeattributesignoredaftertypeisalreadydefined这看起来很奇怪,因为据我所知,该警告旨在防止实际错误,例如:class__attribute__((visibility("default")))MyCla

c++ - 是否可以通过#define 将 g++ 设置为遵循 C++11 ISO (-std=c++11)?

我是c++11的新手,我想知道一些事情......我正在使用Code::Blocks,如果我要在此IDE中使用c++11,我必须转到编译器设置,然后检查“让g++遵循C++11ISOC++语言标准”是否有任何解决方法,以便我可以设置单个.cpp文件以在#define语句中使用c++11,如下所示?注意:这是一个“构建”文件,而不是一个项目通过在不在项目中时设置编译选项,它会将其设置为我不想发生的全局编译选项我知道您可以在项目文件中自定义构建选项,它将仅为该项目设置c++11#include#define-stdc++11intmain(){#if__cplusplus==201402L

c++ - g++ 无法链接 libgsl

我尝试在一个项目中使用gsl库,但是我无法从gsl网站上获取示例程序正常运行。源代码和所有命令都取自网站:https://www.gnu.org/software/gsl/manual/html_node/Using-the-library.html#Using-the-library程序如下(test.cpp):#include#includeintmain(void){doublex=5.0;doubley=gsl_sf_bessel_J0(x);printf("J0(%g)=%.18e\n",x,y);return0;}然后我先编译没有错误。但是链接失败:$g++-Wall-I/

c++ (g++-4.x) 模板问题

我有这个简单的代码:templateclassGenerator>classTestHelper{};templateclassTest{typedefTestHelperHelper;};它在最新的g++版本上运行良好,但在4.4或4.5中,我收到此错误:test.cpp:7:error:type/valuemismatchatargument1intemplateparameterlistfor'templateclassGenerator>classTestHelper'test.cpp:7:error:expectedaclasstemplate,got'Test'我做错了什么

c++ - 在 C++/G++ 中是否有*任何*方法来获取 C 样式数组的长度?

我已经尝试实现一个lengthof(T*v)函数很长一段时间了,到目前为止还没有成功。对于Tv[n]数组,有两种基本的、众所周知的解决方案,一旦数组已衰减为T*v指针,这两种解决方案都是无用的,甚至是危险的。#defineSIZE(v)(sizeof(v)/sizeof(v[0]))templatesize_tlengthof(T(&)[n]){returnn;}有涉及包装类和容器的变通方法,如STLSoft的array_proxy、boost::array、std::vector等。它们都有缺点,缺乏简单性、语法糖和数组的广泛使用。关于涉及编译器特定调用的解决方案,当delete[]

c++ - g++ 在 ‘(’ token 之前预期不合格 ID

我在使用STL_vector.h时遇到此错误。我在Linux上使用g++进行编译。{if(max_size()-size()max_size())?max_size():__len;}usr/include/c++/4.5/bits/stl_vector.h:1143:40:error:expectedunqualified-idbefore‘(’token我不确定为什么会收到此错误,我搜索了很多并发现了一些“类似”的问题,但我无法解决我的问题。编辑:所以这是错误日志:Infileincludedfrom/usr/include/c++/4.5/vector:65:0,from../.

c++ - 为什么在 g++ 4.4.6 上允许左值到右值引用绑定(bind)?

我正在学习C++11的右值特性。C++Primer第5版说右值引用只能绑定(bind)到右值,但是当我尝试编译这个程序时,它通过了,输出是11。我不明白为什么。我正在使用g++4.4.6,并用编译它g++-Wall-std=c++0xtest.cpp-otest#includeusingnamespacestd;intmain(){inti=0;int&&rr=i;rr=1;std::cout 最佳答案 您的代码无效,左值不能像书上说的那样绑定(bind)到右值引用。g++5.1rejectsyourcode带有错误信息main.c