编译器参数和stdafx.h的疑惑

tangtao 2001-02-20 01:20:00
先描述一下我的步筹
(1)new 一个MFC share DLL 工程,常用的设置,没有特别的
(2)加入两个第三方的库,DLL形式,以LIB方式联接。然后工程设为release版本
(3)将两个库的.h文件加入myView.cpp 或是 MainFrm.cpp中,编译通过,连接时报错:
MainFrm.obj : error LNK2005: "public: class CMyDoc * __thiscall CMyView::GetDocument(void)" (?GetDocument@CMyView@@QAEPAVCUltraGateDoc@@XZ) already defined in MyView.obj

(4)将 setting --> c/c++ --> Precompiled headers 中的 use Precompiled header file(.pch) 改成 Automatic using of Precompiled headers,也就是 /Yufilename 改成 /Yx 。编译、连接正常。
(5)将这两个.h文件移入 stdafx.h 文件中,无论采用(4)中的什么参数,均报(3)中的错误。
(6)又做了几次试验,发现两个.h文件中的一个会引发上述问题,而另一个不会。
(7)可以通过/force 参数强行进行连接,运行不会出错。

我的理解:
显然,在release版中,因 CMyView::GetDocument(void)是inline形式,所以导致多个.obj编译了这个函数,所以导致(3)的问题。问题是所有的.h文件都有定义 #define AFX_LEFTVIEW_H__3C037CF9.....,按理说,应该不会导致重复定义。可是为何插入一个第三方的.h文件会引发上述错误??为何插入文件位置不同会引起不同的错误??可能的问题会处在哪里?? (那个第三方的.h文件看上去也无特别之处)/Yufilename 和 /Yx 差异在哪里??

哪位朋友能详细解释原因!! 不胜感激!!
...全文
137 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyzegg 2001-02-20
  • 打赏
  • 举报
回复
将 setting --> c/c++ --> Precompiled headers 中的 use Precompiled header file中使用stdafx.h不知可不可以,因为vc把一些东西编译进stdafx.h中.一般我都是这样用的,有时候还可以更换包含头文件的次序解决.

tangtao 2001-02-20
  • 打赏
  • 举报
回复
帮帮我了!!
tangtao 2001-02-20
  • 打赏
  • 举报
回复
更正一个笔误
(1)中是创建MFC exe工程,share DLL!

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧