游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1820|回复: 4

编译错误的问题

[复制链接]

56

主题

758

帖子

768

积分

高级会员

Rank: 4

积分
768
发表于 2007-7-7 12:25:00 | 显示全部楼层 |阅读模式
我要使A.cpp文件引用B.cpp文件时(B.cpp中只有一个函数Add(int a,int b)),编译时出现错误如下:
B.obj : error LNK2005: "void __cdecl Add(int a,int b)" (?Add@@YAXHH@Z) already defined in A.obj
清高手指教,谢谢

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2007-7-7 13:27:00 | 显示全部楼层

Re:编译错误的问题

你直接include了cpp文件吧,那样的话,A.cpp会产生一个?Add@@YAXHH@Z,B.cpp也产生一个?Add@@YAXHH@Z,这样link时会名称冲突
你这么做的原因大概是因为你一直在用TC,而TC的一些用户经常不建立工程,直接在一个cpp里include其它cpp,这是一种十分不专业的做法
正确的做法是,写一个B.h,里面有Add的声明(注意声明和定义的区别,书上都有,但一开始不一定好理解),在A.cpp里include这个.h文件,而整个的编译链接用工程或makefile来组织

56

主题

758

帖子

768

积分

高级会员

Rank: 4

积分
768
 楼主| 发表于 2007-7-7 13:37:00 | 显示全部楼层

Re: 编译错误的问题

原来如此!多谢funcman!
再问一个:
VC++6.0中的"External Dependencies"的含义是什么?我把B.cpp文件放入这个文件夹李后用A.cpp引用B.cpp却可以正常编译了,这又是为什么呢?

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2007-7-7 16:00:00 | 显示全部楼层

Re:编译错误的问题

这样的话B.cpp不被编译,就是是说link时只搞了A.obj,B.obj(之前编译的)被无视了,不参加link,相当于include了一个头文件(这里把cpp当作h了),头文件里有定义函数(尽量不要在头文件里做定义,头一般是用来放声明的,模板除外)

56

主题

758

帖子

768

积分

高级会员

Rank: 4

积分
768
 楼主| 发表于 2007-7-7 18:54:00 | 显示全部楼层

Re:编译错误的问题

原来如此!好险哪,我差点就把B.cpp变成头文件啦!汗……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 22:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表