|
1
2
为什么你
这是因为“class some_class”是一个详细的类型说明符,在查找指定的名称时,它将忽略任何非类型声明,因此全局范围内同名的posix函数不会隐藏类名。您尝试了其他两种方法来解决它:使用指令和使用声明:
|
|
2
8
使用命名空间
|
|
|
3
5
你碰到了POSIX
如何避免碰撞?了解你的图书馆。或者你可以像我诊断的那样,说
我不知道您的名称空间问题是什么,但听起来像是一个单独的问题。 |
|
|
4
4
在G++的情况下,使用命令行选项
默认情况下,G++编译为
这些bsd(和posix)stdlib函数是GNU扩展中的一部分。来自glibc文档: http://www.gnu.org/s/libc/manual/html_node/BSD-Random.html “将这些函数与GNU C库一起使用没有好处;我们只支持它们与BSD兼容。”
一般来说,如果您想编写可移植到不兼容编译器的代码,那么您只需记住世界上每个编译器的特性即可。GCC和MSVC是很好的开始。即使有
一开始有一个C标准的原因应该是这样的,这样你就不必担心这些东西了,我个人认为很不幸的是,其他的标准和C标准的头文件搞乱了。但是我想这些函数在BSD上的stdlib中的事实可以追溯到C89之前。如果是这样,那么可以推测它当时避免了BSD和其他unix上的破坏性变化。
顺便说一句,我发现了
|
|
|
5
2
在我看来,您的特定编译器有问题。它不会给我手边的编译器带来错误。 |
|
|
6
2
如果有名称冲突问题,请使用命名空间:
然后叫它
|
|
|
8
1
通常,通过显式地解决歧义错误,可以避免歧义错误。如果不将重复的符号放在另一个命名空间中,这将无法工作(除非 详细的类型说明符 作为帮助 litb points out )因为您在同一个名称空间中有两个符号,并且不能显式引用它们中的任何一个。 将符号放入命名空间时,可以:
请注意,通过从命名空间中提取所有符号
对于完全限定,通常使用简称:
|
|
|
9
0
您是否包括CSTDlib?当我把它包括在内时,我会得到你显示的错误,如果不包括,我不会。 |
|
|
10
0
我使用的g++编译器已经正确编译并运行了您的程序。我正在使用mingw 5.1.6在Windows上运行g++。 |
|
|
Daniel Viaño · 将函数移动到不同的文件 8 年前 |
|
|
Trojax · 编译多个。c和。h文件 8 年前 |
|
Stevoisiak · 为什么#包含打破全局变量? 8 年前 |
|
|
jaxonjma · 在另一个JSP中动态发送并包含JSP 8 年前 |