容易笔误之处
"=="
被写作"="
导致逻辑出错
Syntax
too many initializers for ‘const char []’
static const char szret[] = { "I get a correct result\n", "sometion wrong\n"};
StackOverflow解决方案
原因是字符数组中存放的内容是string类型的元素,应该用字符指针的数组,如const char* szret[]
fatal error non-const lvalue reference to type xxx
C++中临时变量不能用作非const的引用,参考博文
C++中如果一个参数是以非const引用传入,c++编译器就有理由认为程序员会在函数中修改这个值,并且这个被修改的引用在函数返回后要发挥作用。但如果你把一个临时变量当作非const引用进行传参,由于临时变量的特殊性,程序员并不能操作临时变量,而且临时变量随时可能被释放掉,所以,一般说来,修改一个临时变量是毫无意义的。据此,c++编译器加入了临时变量不能作为非const引用的这个语义限制。
error: expected unqualified-id before ‘<’ token
有如下几种情况:
1)定义类时没有写分号;(已排除)
2)函数定义时多写分号;(已排除)
3)大括号'<'
使用不当(真实原因是template
误写为typedef
)
error: redeclaration of "xxx"
重复声明某个变量,常出现在笔误之处。
expected type-specifier before
没有引入相应的头文件。若已经引入,检查是否拼写错误。
fstream
ifstream传参给函数,必须是引用类型。如果需要根据这些参数调用构造函数,那么需要重载一个构造函数。
编译
参考博客
注意:若出现collect2: error: ld returned 1 exit status
,其中ld
表示连接错误。
原因可能如下:
1)连接库参数的顺序不对:在默认情况下对于-l
使用库的要求是越是基础的库越要写在后面,无论是静态还是动态;
注:实际原因是没有对该函数的定义,当时写在vscode上但是忘了拷贝过来(雾
undefined reference to 析构/构造/vtable
1)纯虚函数需要定义函数体
2)如果跟的是vtable,是子类没有父类虚函数的实现
class Blog() { virtual ~Blog(); //错误 virtual ~Blog() { } //正确