2010-06-23 107 views
1

我得到这样的错误:C++类重定义错误帮助

FxMathFunctions.h: In function 'FxInt32 IMin(FxInt32, FxInt32)': 

FxMathFunctions.h:13: error: redefinition of 'FxInt32 IMin(FxInt32, FxInt32)' 

FxMathFunctions.h:15: error: 'FxInt32 IMin(FxInt32, FxInt32)' previously defined here 

在FxMathFunctions.h我:

11: struct FxPoint2d; 
12: 
13: inline FxInt32 IMin(FxInt32 i1,FxInt32 i2) 
14: { 
15: if (i2 < i1) i1 = i2; 
16: return i1; 
17: } 

FxInt32中,我包括头定义为:

typedef long    FxInt32; 

如果说FxInt32正在被重新定义,或者如果整个功能是我不能被错误决定。

我该如何解决这个问题?

UPDATE我在上面添加了行号。

+0

FxMathFunctions.h的第13行和第15行是什么? – bdonlan 2010-06-23 04:29:53

+0

这很奇怪。看起来行号有点向下移动了一点。 11-12行是什么? – bdonlan 2010-06-23 04:48:45

+0

@bdonlan - 再次更新 – Elliot 2010-06-23 04:53:03

回答

0

移动函数的定义放在.cpp文件,只是有 在.h文件中的原型。让关于优化

+0

为此,我不会在.cpp中使用内联,正确吗?以及如何改变将原型放入.h中?内联使用混淆了我,不要删除它,因为我将代码移动到.cpp中? – Elliot 2010-06-23 04:45:55

+0

是的,不需要在.cpp文件中内联。 inline关键字是一条指令,告诉编译器复制整个函数实现,而不是仅仅调用该函数。只要删除内联,把FxInt32 IMin(FxInt32 i1,FxInt32 i2);在你的头文件和.cpp文件中的定义中,你很好。 typedef当然也应该放在标题中。 – 2010-06-23 04:51:53

0

很难不知道什么是上线13和FxMathFunctions.h的15说的编译器担心。也就是说,请记住C++在<algorithm>中有一个内置的std::minstd::max,它们适用于所有可比较的类型。

+0

谢谢,让我看看这些。 – Elliot 2010-06-23 04:46:20

+0

添加链接到您的文档 – bdonlan 2010-06-23 04:48:24

1

这就是说整个功能被定义了两次。

我的心理调试的力量告诉我,你在某种程度上递归包括报头,并且头没有对这种情况的发生适当的后卫。因此内联函数被定义两次。

+0

我的心理upvoting权力告诉我,你可能是正确的。 – 2010-06-23 04:52:09

+0

奇怪 - 为什么报告的行号会被移动呢? – bdonlan 2010-06-23 04:53:16

+0

我有一名头球守卫,当然,我改变了它的名字。 #pragma也是一次 – Elliot 2010-06-23 05:10:15