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

  1. 如果使用了using namespace std; 那么一定要包含 #include <iostream>,否则编译会报错: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下的编译产生了影响导致的。
  6. linux下编译出现错误:vars.d:1: *** multiple target patterns.  Stop. 网上查有说是因为makefile中的冒号需要转义,‘\:’替换为‘:’。但是我这里的不是这个原因,我的错误提示里有个vars.d的名字,我一直没注意,其实在我这里刚好有这个文件,我把他删了,再重新编译就好了。应该是这个文件是在别的系统里编译时留下来的临时文件吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值