【发布时间】:2014-10-23 02:03:24
【问题描述】:
在病毒迫使我重置为出厂状态后,我一直试图在我的计算机上设置 SDL。使用我的 IDE CodeBlocks 运行 SDL 很容易,但设置扩展库却不那么容易。 CodeBlocks 识别库的存在,但在 SDL_ttf 标头和 SDL_image 标头中给了我多个错误。 给我带来麻烦的代码部分是这样的:
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif
第一行产生错误“error: expected unqualified-id before string constant”,第三行产生上述错误和错误“error: expected '}' before end of line”。 我的猜测是,这可能与用 C 编写的 SDL 有关,也许我的 CodeBlocks 尚未配置为识别 C。
编辑:测试源代码是这样的:
SDL_Surface* imageBlitingFunctions::loadText(Uint8 red, Uint8 blue, Uint8 green, std::string fontname, int fontSize, std::string text)
{
SDL_Color textColor = {red, blue, green};
TTF_Font *font1 = TTF_OpenFont(fontname.c_str(), fontSize);
SDL_Surface *message1 = TTF_RenderText_Solid(font1, text.c_str(), textColor);
return message1;
}
【问题讨论】:
-
ifdef'ed extern C 是使 C 函数可从 C++ 调用的非常标准的方法,这完全没问题。你用的是什么编译器?确切的错误信息是什么,测试程序的源代码是什么?
-
是的,我不确定您发布的代码是否存在问题。也许这就是它之前的样子。无论如何,您应该确保这不是您的环境中的一些错误,您可以尝试创建一个新的 c++ 项目,其中包含一个声明为
extern "C"的简单函数,以查看它是否已经阻塞。 -
它仍然给我“错误:字符串常量之前的预期 unqualified-id”。
-
我想这里没有读心者,抱歉。您描述的错误消息发生在编译 C 代码(不是 C++)时出现
extern "C"块。为什么你的 C 代码定义了__cplusplus- 超出了我的想象(它显然不能由 C 编译器本身完成,因为它知道它只为 C++ 保留)。检查您的定义和编译器标志。 -
好吧,我在另一台计算机上设置了它,并使用 TTF 运行了一个不同的 SDL 项目,所以它一定是我的程序中的一个问题。我尝试调试,它给了我错误:“程序入口点 SDL_getenv 无法位于动态链接库 SDL.dll 中。”
标签: c++ sdl header-files sdl-ttf