容易笔误之处

  • "=="被写作"="导致逻辑出错

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() { }  //正确