编译常见问题汇总

1、thread初始化错误,
usr/bin/ld: lcmmer.o: undefined reference to symbol 'pthread_create@@GLIBC_2.2.5' //lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
在这里插入图片描述
根据以上提示,在libpthread.so.0中的错误,解决方法:
在编译时引用pthread库,qmake:LIBS += -lpthread; cmake: target_link_libraries( ${PROJECT_NAME} pthread)

2、/error: binding ‘const std::mutex’ to reference of type ‘std::lock_guardstd::mutex::mutex_type& {aka std::mutex&}’ discards qualifiers std::lock_guardstd::mutex lock(mutex_);
想要在const类型的成员函数中加入线程锁,但是const内禁止成员变量的更改。
在这里插入图片描述
可以将变量定义为mutable,即可在const函数内改变其之。
在这里插入图片描述
关于mutable
3、关于基类子类相互引用头文件的问题
: error: expected class-name before ‘{’ token
class AstarSearcher : public Searcher { ^
error: invalid use of incomplete type ‘class Searcher’
class AstarSearcher : public Searcher {
^
基类为Searcher,子类为AstarSearcher , 在基类Searcher.h头文件中引用了子类AstarSearcher头文件AstarSearcher.h,出现以上两类错误。这属于前置申明的问题。而前置申明后,也会不完整的类型(尽管你有前置声明)
推荐!!! https://blog.csdn.net/yunyun1886358/article/details/5672574理解前置申明。
问题与这个博文相似https://blog.csdn.net/qq_26973089/article/details/85052168,解决方法。
4、继承时出现如下错误:
C++ 继承子类链接时 :·error: undefined reference to vtable for class
可能是未对析构函数进行实现。在子类的析构函数后加上{},或者定义以下即可。
参考https://blog.csdn.net/ai2000ai/article/details/47317863

5、编译出现如下错误:error: ‘uint8_t’ has not been declared等等一系列引用的标准库函数缺没有定义。
可能原因:1、未引用;2、引用的头文件在自己的命名空间里面。

头文件的引用必须在所有命名空间以外

6、ifstream引用了提示不完整
error: variable ‘std::ifstream grab’ has initializer but incomplete type
std::ifstream grab(filename);
在这里插入图片描述
因为只是引用了#include , 虽然都能够找到定义的变量,但是仍更改为#include
原因不详。

你可能感兴趣的:(C++,c++,compiler)