作者littleshan (我要加入剑道社!)
看板C_and_CPP
标题Re: [问题] 同一个function在不同cpp档使用
时间Thu Mar 26 00:32:39 2009
※ 引述《gppo (香蕉是什麽?)》之铭言:
: 标题: [问题] 同一个function在不同cpp档使用
: 时间: Wed Mar 25 22:48:14 2009
:
: 我在main.cpp写了一个function void A(void)
[deleted]
: 然後在x1.h与x2.h里面有写到
: extern void A(void);
: 因为想在x1.cpp与x2.cpp里面使用A这个function
:
: 但是compile以後有出现下面的warning
: x2.h [Warning] redundant redeclaration of `void A(void)' in same scope
: x1.h [Warning] previous declaration of `void A(void)'
:
: 请问该怎麽改写才不会有这个warning呢?
答案很简单:你应该写一个 main.h
其中有 void A(void) 的宣告
然後让 x1.cpp 和 x2.cpp 去包含 main.h
如果你在 x1.h 和 x2.h 都宣告了 A()
那 main.cpp 同时含入这两个档
compiler 当然会抱怨重覆宣告
: 另外有砍掉compile後产生的*.o档 再执行compile的话
: 会与没有砍掉*.o档直接compile的结果不同
: 这是怎麽回事呢?
你的 Makefile 写错了
或是你没用 Makefile 手动重编 结果自己也搞不清楚那些要重编那些不用
记住:只要 XXX.cpp 有包含的任何 header file 有变动
(header 中再去 include 其它的 header file 也包含在内)
那这个档就要重编
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.116.187.104
: 推 QQ29:function 预设就是extern了 03/25 23:03
: 推 QQ29:我是看14161的@@ 03/25 23:05
: → gppo:= =a 但是如果我把x1.h x2.h里面的extern那行砍掉 03/25 23:42
: → gppo:他会说undeclared... 03/25 23:43
: 推 sunneo:把A的标头档用#pragma once保护 03/25 23:48
不要用 #pragma once
这不是标准
而且问题不是出在这
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.115.147.203
1F:推 QQ29:x1.h 和 x2.h 都宣告了 A() ~~在VC8 好像没看过这个警告耶 03/26 00:37
2F:推 gppo:谢谢!! 说明很清楚orz~ 03/26 13:42