C++编程,语法错误导致的编译问题记录

  1. 如果使用了using namespace std; 那么一定要包含 #include ,否则编译会报错:error C2871: 'std' : a namespace with this name does not exist
  2. vs工程下,类的静态成员变量的初始化,放在h文件中。可能编译会有类似报错:error LNK2005: "private: static class XXXXX * XXXXX::xxxxx" (?xxxxx@XXXXXX@@0PAV1@A) already defined in XXXXX.obj。原因是该h文件被两个不同cpp文件包含了,在编译时,他们生成自己的obj文件时,互相发现有重复,所以报错。如果能保证你的头文件只被包含一次,那么可以将该初始化放在头文件里,如果不能,那就初始化到源文件里。不光是类的静态成员变量,全局数据都有这个问题
  3. vs工程下,全局变量都需要初始化,如果没有的话,编译报错:error LNK2001: unresolved external symbol。对于模板类却有点不一样,静态成员变量的初始化和成员函数都必须在h文件中实现,否则,有实例化或调用该成员函数的代码时,还是会报LNK2001这个错误。
  4. linux下编译出现错误:error: ‘XXXXXXXXXX’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]  当时代码编译遇到类似这样的一个报错,发现跟模板类的使用有关。我的代码在centos6.5下是能编译的过去的,但是到centos7.5下就报这个错误,所以我认为是gcc的语法规则有变导致的,最后终于找到问题的解决办法是,在模板类的使用中,有继承关系时,子类调用其父类的方法时,加上this指针就可以了。
  5. linux下编译出现错误: undefined reference to `memcpy@GLIBC_2.14' 以及undefined reference to `clock_gettime@GLIBC_2.17',我当时报错的原因是因为我先前在centos7.5下编译过该工程,没有问题。随后我又在centos6.5下编译就报错了。这是在7.5下编译产生的文件我没有做清理从而对6.5下的编译产生了影响导致的。

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