• 其实这个问题一直都有,自己在不少书上看过,但是真正写起东西来的时候还是会出一些问题。...当你第一个使用这个头的.cpp文件生成.obj的时候,int i 在里面定义了当另外一个使用这个的.cpp再次[单独]生成.

    其实这个问题一直都有,自己在不少书上看过,但是真正写起东西来的时候还是会出一些问题。


    无意中遇到了这样的编译问题, 于是google,发现在.h文件里定义变量,发生这问题的概率是灰常大的.

     

    下面这段红字是参考网上的说法:

     

    当你第一个使用这个头的.cpp文件生成.obj的时候,int i 在里面定义了当另外一个使用这个的.cpp再次[单独]生成.obj的时候,int i 又被定义然后两个obj被另外一个.cppinclude 这个头的,连接在一起,就会出现重复定义.

     

    不过经过一轮研究发现.. 其实这说法不怎么正确.. 最起码对VS来说..

    经过实验, 发现只要有两个cpp同时包含一个定义了变量的.h文件,就会提示错误.

     

    再回想下刚考完的编译原理, obj是什么?  其实就是cpp翻译后的一坨中间代码.. 一般编译过程就是把cpp先翻译成obj, 最后把obj再连接成exe. 这样,不管中间有没有第三者把前两个连接一起, 最终obj还是会汇集在一起.. 下面可以看到,错误发生在链接,而不是翻译..

     

    正在链接...
    1>3.obj : error LNK2005: "int i" (?i@@3HA) 已经在 2.obj 中定义
    1>D:\编程之美\vs2008代码\dfsdfadsfec\Debug\dfsdfadsfec.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

     

     

    本人得出的结论:

    只要两个或者以上的.cpp同时包含了一个定义了变量的.h文件,就会提示错误.

    不过注意, 这中间可能会包含些比较复杂的逻辑关系.. 

    例如我的那坨代码.. 

    假定一个定义了变量的1.h文件

    有1.cpp和2.cpp, 1.cpp包含1.h,   2.cpp只包含2.h  但是2.h包含了1.h..  所以1.h中定义的变量编译的时候会在2.pp中有定义. 于是乎2.cpp翻译成的obj里也会有定义, 结果导致提示obj里重定义.

    在头文件和cpp文件错中复杂的情况下, 根本就很难判断其祸根源.

    所以得出结论:

    没事就别在.h中定义变量,或者初始化静态成员变量(我就是后一种情况).

    不过有种比较酷的做法, 就是直接改成.c编译.  据说c里遇到重定义,  会忽略为声明.

    展开全文
  • 报错信息:error LNK2019: 无法解析的外部符号 报错的可能原因:  可能原因,没有写构造...看报错信息是哪个.obj文件报的错误找到那个类,如这里找到的是TollgateScene.cpp(.obj是编译出来的文件)中提示说找不到p
  • 今天上午在VC2008中调试一个可执行文件时代码生成通过,但是连接时编译器报错: 1>Linking...1> Creating library D:\Visual Studio 2008\test\Debug\test.lib and object D:\Visual Studio 2008\test\...
  • cvblob.lib(cvblob.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”(the_first.obj 中)1>cvblob.lib(cvtrack.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL...
  • E:\project\CHENWEN\proj.android\jni>ndk-build [armeabi] Compile++ thumb: cocos2dcpp_...make.exe: *** [E:/project/CHENWEN/proj.android//obj/local/armeabi/objs/cocos2dcp p_shared/hellocpp/main.o] Error 1
  • 今天刚装cocos引擎,准备跑起来,练练手结果因为vs是2017版本,结果本来在vs2012上能完美运行的cocos2dx代码,结果却翻了车,结果查了一下,得知是vs2017的一些库函数的配置改变了,就我这次遇到的几个比较容易遇到...
  • 使用命令“cocos gen-libs”生成预编译库报错信息如下: cocos2d-x-3.11/tools/simulator/frameworks/runtime-src/proj.android/../../../../..//tools/simulator/libsimulator/proj.android/../lib/Project...
  • 原来有单个文件tcpclient.c,运行gcc -o tcpclient tcpclient.c可以顺利完成编译,并能与下载到目标板中的tcpserver成功通讯; 现在把tcpclient.c中的底层通讯部分抽取出来,单独放到一个文件中nettrans.c中,并有...
  • 使用VS2015编译cocos2d-x-3.6引擎的cpp-tests工程,首先报错的是libcocos2d模块,错误如下: 1、错误:snprintf宏重定义:#error: Macro definition of snprintf conflicts 原因 在VS2015前,...
  • 1、使用命令创建新项目:  cocos new -p ... Cocos2d-x 3.0 Alpha 1开始 对目录结构进行了整合。结果有些附加项目也被在项目中被精简出去。 比如说如果你需要使用CocoStdio导出的JSON、或使用Exte
  • Cygwin编译cocos2d c++工程报错make: *** [/cygdrive/e/18.03.26/package/android-ndk-r9d-windows-x86_64/android-ndk-r9d/build/core/build-binary.mk:589: obj/local/armeabi/libcocos2dcpp.so] Error 1原因:...
  • vs报错: 错误 4 error LNK1104: 无法打开文件“libSpine.lib”  错误 1 error LNK1181: 无法打开输入文件“libSpine.lib”  首先确定工程以引入libSpine: 方法一:你自己新建项目后,需要操作 项目》属性》...
  • [armeabi] SharedLibrary : libcocos2dcpp.so E:/Android/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi
  • 现在官方的Cocos Studio已经支持打包apk文件,写该随笔的时候还没试过官方的打包功能,所以就按自己的学习顺序先把打包的心得写下。 问题及最终解决方案: 其中耗时最长的问题就是ndk-r10改成ndk-r9d后一直编译不...
  • 现在使用的版本是2.2 ,网上找了个参考贴 :
  • cocos2d-x项目与vs2013编译 2016-05-31 11:30:08
    cocos2d-x项目与vs2013编译2014-12-17cheungmine因为C++11引入了众多开源软件的特性,导致cocos2d-x r3.3项目无法用 vs2010编译. 所以安装了vs2013, 然后编译cocos2d-x的项目. 整个过程记录如下:1) 打开cmd, 进入...
  • cocos2dx-3.0 移植android平台 2018-01-08 09:29:23
    网上3.0的教程真心少,可以说没有吧,大多都是2.x 或者 3.0测试版之类的,由于我心大,没有照着2.x去搞,后来搞完后总结了一下,发觉其实3.0的移植android平台很简单了,也不需要照着2.x搞,下面记录一下一个"超级...
  • 从官网下载libcurl之后,它内部已经包含了各个VC版本的工程文件(sln文件和vcproj文件)。 我们能够很方便的编译出静态库和动态库。   在使用动态库的时候,一路顺风,没遇到编译问题; 在使用静态库时,却遇到...
  • 今天在使用build_native.py打包cocos2dx的android
  • CocosCreator的踩坑之旅 2017-03-21 13:56:57
    重新安装显卡驱动 参考: http://forum.cocos.com/t/cocos-creator/35693/8 http://www.cocoachina.com/bbs/read.php?tid-457588.html
1 2 3 4 5 ... 20
收藏数 622
精华内容 248