static成员
类中的static成员只能定义一次,因此定义应该放在类的非内联函数定义文件中,并且不应该放在类的成员函数或构造函数中(无法确保只定义一次)
例如:
//Test.h
class Test{
static string field;
void init();
}
//Test.cpp
string Test::field = "";//正确定义
void init(){
string Test::field = ""; //错误定义,编译出错
}
makefile
加了-g依然报No debugging symbols in gdb
在编写makefile时候,使用了.c.o:这条命令。
objects=main.o setup.o
main : $(objects)
g++ -g -o $@ $^ -l pbc -l gmp
.c.o: #改成.cpp.o:即可正常产生调试信息
g++ -g -std=c++11 -c $< -l pbc -l gmp
实际上上述写法编译cpp会导致-g参数没有被翻译成功,我也不知道为什么。(有空查查看)
emcas company无法自动补全头文件
一开始这么配置company-backends,总是无法自动补全头文件,但是用M-x company-c-headers就可以补全。
灵机一动,把company-c-headers放company-irony前面,可以正常补全了。
顺便默认的company补全最小前缀是3(company-minimum-prefix-length),我改成1了,但实际貌似没太大影响。
(defun custom-c/cpp-company ()
(custom-set-variables
'(company-backends
(quote
( company-irony company-gtags company-c-headers company-files company-cmake company-clang )))
;;正确顺序如下,可能是company-irony阻塞了company-c-headers
;;( company-c-headers company-irony company-gtags company-files company-cmake company-clang )))
'(company-idle-delay 0.1)
'(company-minimum-prefix-length 1)
)
)