带有complex.h的gcc编译器选项
gcc compiler options with complex.h
我在CodeBlocks(使用gcc(中编译了一个程序,它运行得很好。现在,我尝试从命令行使用gcc编译相同的程序。它产生了这个错误:
error: lvalue required as left operand of assignment
对于这四条线路:
OutArray[Index[g]].real() = TempVBF.FirstReal[g];
OutArray[Index[g]].imag() = TempVBF.FirstImag[g];
OutArray[Index[g]+ElementSize].real() = TempVBF.SecondReal[g];
OutArray[Index[g]+ElementSize].imag() = TempVBF.SecondImag[g];
在这行中,我有四个值,包含2个复数的实部和虚部。我将这些值赋给2个复变量。我试着这样做:
OutArray[Index[g]] = (TempVBF.FirstReal[g],TempVBF.FirstImag[g]);
在运行时中编译但生成错误值
为什么它是先编译的而不是现在??在不更改这些行的情况下,我可以使用什么选项来绕过这个问题??
我正在使用命令:
gcc lib/Globals.cpp lib/Comp/SNT_FFT_Comp.cpp lib/Comp/ST_FFT_Comp.cpp lib/Comp/VNT_FFT_Comp.cpp lib/Comp/VT_FFT_Comp.cpp lib/Decomp/* test/main.cpp -lpthread -std=gnu++0x -o TEST
移除CCD_ 1会产生更多的错误。将其改变为CCD_ 2不会改变任何内容。
您看到的错误几乎可以肯定,因为real()
和imag()
返回实部或虚部的值;不是对它的引用。如果看不到代码,就不可能确定,但它更有可能被定义为:
double real() const { return this->_real; }
比这样:
double& real() { return this->_real; }
对于后一种情况,您可以使用引用来执行分配。在前一种情况下,你有一个复数实部的副本,你不能用它来改变你的复数。如果您愿意,可以阅读更多关于lhvalues和rhvalues的信息。
至于为什么它一开始就不起作用,这几乎是不可能回答的。您提供的代码似乎缺少一个类型——换句话说,看起来您应该这样做:
OutArray[Index[g]] = MyComplexNumberClass(TempVBF.FirstReal[g],TempVBF.FirstImag[g]);
为什么这些值是错误的可能是由于很多原因(内存踩踏、索引"g"是错误的、复数没有你认为它们应该有的值,等等(。要调试它,您可以尝试一步一步地打印事物的值,直到您看到一些意想不到的东西,无论是使用std::cerr
还是使用gbd。
相关文章:
- Win32编译器选项和内存分配
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 基于编译器选项的编译二进制路径
- Qt5 用户界面编译器:-i 选项不可用
- 将"-01"替换为"-02" 英特尔编译器选项会导致 FPE 在较小的 for 循环行程计数中抛出
- 用于捕获未赋值的 r 值的编译器选项
- 暂时将C++项目(VS2015)移至Android操作系统.编译器选项?
- VS2017 C++编译器选项会影响矩阵乘法?
- Gradle with C++:如何更改编译器选项?
- qmake中添加了编译器选项的附加makefile目标
- 在编译器选项上定义字符串
- Clang编译器选项将异常规格LAX错误视为警告
- "-D__STDC_FORMAT_MACROS" GNU 编译器选项
- 不同的输出调用clang上的malloc应用编译器选项-00和-03
- 包括查找编译器选项的外部标头
- 从已编译的可执行文件中获取编译器选项
- Protogen vs. Protoc 编译器选项
- 是否有一组标准编译器选项
- 如何在 eclipse makefile 项目中的编译器选项中设置 -std=c++0x