2012-07-23 320 views
0

我必须包含两个不同的头文件(一个是标准assert.h),它们都具有断言函数。我无法控制这些头文件(所以我不能改变它们)。我收到一个编译器错误,指出这两个函数之间的冲突。我怎样才能在我的代码中指定来自assert.h的assert函数应该被用来消除这个编译器错误?C++ - 具有相同名称的函数

+0

[这是一个宏,而不是函数](http://en.cppreference.com/w/cpp/error/assert)。你必须'#undef assert'。不过,我不确定这对你有多好。 – chris 2012-07-23 14:54:14

+0

请发布你正在得到的确切的错误。正如你所看到的,你模糊的问题会导致猜测。 – 2012-07-23 14:56:13

+0

备注:您应该使用'cassert',而不是'assert.h'。当然,当它是一个宏时,名称空间换行并不重要。 – chris 2012-07-23 14:56:57

回答

0
namespace OtherAssert 
{ 
#include "private_assert.h" 
} 
//... 
void foo() 
{ 
    OtherAssert::assert(true); // non-standard assert 
    assert(true); // the one from standard assert.h 
} 
+2

这可能让你的代码编译,但没有更多的工作,它(通常)不会链接。链接器将查找'OtherAssert :: assert',并且由于该库(显然)包含':: assert',而链接将失败(除非头中声明的所有函数也被定义为内联函数)。 – 2012-07-23 15:02:42

+0

@JerryCoffin当然取决于细节。 (也许这个函数是内联声明的。) – cdhowie 2012-07-23 15:05:06

+0

@cdhowie:好点。纠正。 – 2012-07-23 15:05:55