我很久以来就遇到了错误,接下来,我正在学习,我想我不明白这个错误.
droid.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Droid&)’:
droid.cpp:94:30: error: passing ‘const Droid’ as ‘this’ argument of ‘std::string
Droid::getId()’ discards qualifiers
[-fpermissive]
Run Code Online (Sandbox Code Playgroud)
第94行:
std::ostream& operator<<(std::ostream &os, Droid const & a)
os << "Droid '" << a.getId() << "', " << *a.getStatus() << ", " << a.getEnergy() << std::endl;
Run Code Online (Sandbox Code Playgroud)
和听众:
std::string getId();
Run Code Online (Sandbox Code Playgroud)
我对"operator <<",a.getId,a.getStatus,a.getEnergy中的3个调用有相同的错误.
有人可以向我解释一下编译器在说什么吗?
我试图在MacBook Pro Retina上使用CUDA驱动程序版本:7.0.36和cuda toolkit 7.0在nVidia GT 750 M中编译,以下代码及其makefile但是它给了我这个错误:
nvcc致命:重新定义参数'optimize'.
尽管我已经能够用nvcc编译和执行其他程序,但是使用makefile等,现在我不是.
此外,我还没有找到关于这个错误的有用的东西所以我在这里问它是否有人知道如何解决它.我是CUDA的新手,所以如果您需要更多信息,请索取.
这是我的Makefile.inc:
CXX := nvcc
OPTIM := -O3
DEBUG := -g -DOLB_DEBUG
CXXFLAGS := $(OPTIM)
ARPRG := ar
LDFLAGS := -O3
PARALLEL_MODE := OFF
OMPFLAGS := -fopenmp
BUILDTYPE := precompiled
INPUTDIR := ./input
OUTPUTDIR := ./output
INCDIR := ./inc
OBJDIR := ./obj
SRCDIR := ./HeatTransfer
BINDIR := ./bin
###########################################################################
## defines shell
SHELL := /bin/sh
Run Code Online (Sandbox Code Playgroud)
和Makefile:
###########################################################################
ROOT := .
include $(ROOT)/Makefile.inc
######################################################## Operational system
OS …Run Code Online (Sandbox Code Playgroud) 在为 python 构建 C 扩展时,我看到一些gcc重复的标志。当我跑步时:
python setup.py build_ext
Run Code Online (Sandbox Code Playgroud)
正在运行的构建命令如下所示:
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march=x86-64 -mtune=generic -O3 -pipe -fstack-protector-strong -fno-plt -flto=4 -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -march=x86-64 -mtune=generic -O3 -pipe -fstack-protector-strong -fno-plt -march=x86-64 -mtune=generic -O3 -pipe -fstack-protector-strong -fno-plt -fPIC -I/usr/include/python3.7m -c /tmp/src/source.c -o build/temp.linux-x86_64-3.7/tmp/src/source.o
gcc -pthread -shared -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -flto=4 -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now build/temp.linux-x86_64-3.7/tmp/src/source.o -L/usr/lib -lpython3.7m -o build/lib.linux-x86_64-3.7/source.cpython-37m-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)
好吧,那是一篇很长的文章。但是,正如您所看到的,一些标志是重复的。这是第一个命令中的重复:
-O3重复4次。-fno-plt重复3次。-fstack-protector-strong重复3次。-march=x86-64重复3次。-mtune=generic重复3次。-pipe重复3次。除了-Wl,...传递给链接器的标志之外,这些标志的重复和排序还有什么意义吗?
我正在尝试将"git describe"的输出添加到我的应用程序的about窗口中,因此更容易找出人们使用的应用程序版本.
我可以通过添加以下编译器标志来实现:-DAPP_VERSION ="$(git describe HEAD)"
但由于该项目基于qmake,我想找到一种方法将其放入Qt项目文件中.这可能吗?如果是这样,怎么样?
编辑:我尝试添加以下内容:
QMAKE_CXXFLAGS + = -DAPP_VERSION ="$(git describe HEAD)"
但它只是给了我"-DAPP_VERSION =",所以我想我必须使用一些转义字符,但我不知道哪些和哪里.:/
我正在实施一个分析器.我想使用构造函数/析构函数来跟踪我何时进入/退出函数.
我的代码粗略概述如下:
class Profile
{
Profile(void); //Start timing
~Profile(void); //Stop timer and log
};
//...
Game::Game(void) : m_Quit(false)
{
Profile p();
InitalizeModules();
//...
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,不会调用构造函数和析构函数.即使我反汇编,也没有对Profile :: Profile()的引用.我知道该标准指定编译器无法优化具有非平凡构造函数的实例.
编译器或链接器的命令行上没有优化标志.
我也试过指定属性((used)),但无济于事.
这是反汇编:
(gdb) disassemble Ztk::Game::Game
Dump of assembler code for function Ztk::Game::Game():
0x00000000004cd798 <+0>: push %rbp
0x00000000004cd799 <+1>: mov %rsp,%rbp
0x00000000004cd79c <+4>: push %r12
0x00000000004cd79e <+6>: push %rbx
0x00000000004cd79f <+7>: sub $0x30,%rsp
0x00000000004cd7a3 <+11>: mov %rdi,-0x38(%rbp)
0x00000000004cd7a7 <+15>: mov -0x38(%rbp),%rax
0x00000000004cd7ab <+19>: mov %rax,%rdi
0x00000000004cd7ae <+22>: callq 0x4cdc6a <Ztk::Highlander<Ztk::Game, int>::Highlander()> …Run Code Online (Sandbox Code Playgroud) 在Xcode 4.4中,我似乎无法将编译器标志添加到单个源文件中.我试图从单个文件中删除ARC,但我无法弹出添加标志.双击或选择项目并按Enter键不起作用,也尝试选择多个并按下输入不起作用.我尝试过两个独立的项目,其中一个是我用Xcode 4.4创建的.是否有另一种手动将编译器标志添加到源文件的方法?(我没有旧版本的Xcode来查看它如何存储值[可能在pbxproj中]).
注意:MacBook Pro带Retina显示屏 - OSX 10.8
我的代码是这样的:
#define ZERO_CONSTANT 0
foo(size_t * p_size);
foo(ZERO_CONSTANT); //Doesn't warn
Run Code Online (Sandbox Code Playgroud)
哪个gcc标志会拨打电话foo(ZERO_CONSTANT)进行警告?
我在用Glasgow Haskell Compiler, Version 7.8.3, stage 2 booted by GHC version 7.6.3.
我试图在Haskell中对List类型使用以下数据定义:
data Eq a => List a = Nil | Cons a (List a)
Run Code Online (Sandbox Code Playgroud)
但是,-XDatatypeContexts默认情况下,该标志是必需的,已删除的,甚至是从语言中删除的.它被广泛视为语言的错误.我也不想为List的定义使用特殊标志,因为我试图复制现有列表类型的功能.然后我能够使用以下代码段:
data List a where
Nil :: List a
Cons :: Eq a => a -> List a -> List a
Run Code Online (Sandbox Code Playgroud)
它运行正常.这个解决方案的明显问题是现在我需要使用-XGADTs标志,在这种情况下我仍然不想依赖它,因为内置版本的列表不需要运行.有没有办法限制其中的类型Cons,Eq a以便我可以比较两个列表,而无需编译器标志和不使用derived关键字?其余代码如下:
instance Eq (List a) where
(Cons a b) == (Cons c d) = (a == c) && (b == …Run Code Online (Sandbox Code Playgroud) 我用-D编译器选项定义了一个符号debug:-DDEBUG_VALUE我是一个函数,其中一个参数的存在取决于符号调试标志的定义或更少.
即如果我定义了DEBUG_VALUE
my_function(int parameter1 ,int my_parameter_dependant)
Run Code Online (Sandbox Code Playgroud)
除此以外
my_function(int parameter1)
Run Code Online (Sandbox Code Playgroud)
通过这种方式
my_function(int parameter1 #ifdef DEBUG_VALUE , int my_parameter_dependant #endif)
Run Code Online (Sandbox Code Playgroud)
我明白了
error: stray ‘#’ in program
error: expected ‘,’ or ‘...’ before ‘ifdef’
Run Code Online (Sandbox Code Playgroud)
我怎么解决?提前致谢!
(我在Unix系统上使用C++编译器)
我一直在寻找一种快速为我的ios应用程序启用堆栈金丝雀的方法,但是后来我发现最新版本的xcode具有默认启用启用堆栈金丝雀所需的标志。因此,然后我正在寻找一种方法来确保启用堆栈金丝雀,正如其他站点所说,我尝试在终端机中使用otool命令($ otool -Iv appName | grep stack_chk)来确保它并期望它返回'stack_chk_guard和stack_chk_fail'标志,但未返回任何值/标志。因此,我然后尝试在“其他C标志”下手动设置标志“ -fstack-protector-all”,但仍然无法通过otool命令看到标志。
我在这里想念什么?还是我误解了什么?如何确保自己为应用程序启用了堆栈金丝雀?
compiler-flags ×10
c++ ×3
gcc ×3
optimization ×2
c ×1
c++11 ×1
constructor ×1
cuda ×1
g++ ×1
gadt ×1
haskell ×1
ios ×1
list ×1
nvcc ×1
objective-c ×1
qmake ×1
qt ×1
stack-smash ×1
xcode ×1