【发布时间】:2014-03-03 05:58:17
【问题描述】:
我正在尝试编写一个调用 C 函数的 C++ 代码,比如说hello_world()
进而调用用户定义的typename() 函数。当我在 C++ 中包含我的 C 代码时,会出现编译错误,我知道 typename 是 C++ 中的一个关键字,但是为了包含 C 代码,我正在使用
extern "C" { #include "hello_world.h"}
在我的 C++ 代码中,编译过程中仍然存在错误,任何避免这种情况并编译代码的建议,我将不胜感激。
我无法将用户定义的typename() 函数的名称更改为其他名称。那怎么办呢……?
这样的错误:
In file included from New_test.cpp:19:0:
../tools/symbol.h:38:14: error: expected unqualified-id before ‘typename’
../tools/symbol.h:38:14: error: expected initializer before ‘typename’
In file included from New_test.cpp:604:0:
/usr/include/i386-linux-gnu/sys/poll.h: In function ‘int readpacket(channel*, void*, size_t)’:
/usr/include/i386-linux-gnu/sys/poll.h:48:1: error: expected unqualified-id before string constant
New_test.cpp:612:52: error: ‘poll’ was not declared in this scope
【问题讨论】:
-
很可能,您可以对标头进行分区,以便
typename()仅在调用它的 C 源中声明。最小化 C++ 源代码中包含的标头。如果您需要能够从 C++ 调用typename(),请考虑更改您的设计以接受函数指针。 -
如何限制 typename() 只能在 C 源代码中声明。使用 "extern "C" { #include "some_c.h"}" 不会这样做...?
-
只有 c... 但我调用了一个调用 typename() 的 C 函数...
-
Trilok,请分享更多信息——赏金描述听起来好像一个或多个答案是足够的,但您需要更多“来自可靠和/或官方来源的证据”。正如目前所描述的问题,我认为我的回答就足够了。如果你有 SSCCE 会有所帮助。
-
@TrilokM,请说明您遇到了什么错误。