编译cpp文件时出错

发布于 2024-11-10 12:20:15 字数 588 浏览 2 评论 0原文

可能的重复:
C++:malloc:错误:从“void*”的转换无效' 到 'uint8_t*'

你好,

我有这个小函数

Uint32 moveSprite(Uint32 interval, void *param)
{
    SDL_Rect* spritePos = param; 
    spritePos->x++;

    return interval;
}

这里的问题很简单,我使用代码块,当我将此文件保存为 C 文件时,它编译没有问题,但是一旦我保存它作为一个 C++ 文件,我有这个错误:

error: invalid conversion from 'void*' to 'SDL_Rect*'|

有谁知道这里的问题是什么吗?

Possible Duplicate:
C++: malloc : error: invalid conversion from ‘void*’ to ‘uint8_t*’

Hello,

I have this little function

Uint32 moveSprite(Uint32 interval, void *param)
{
    SDL_Rect* spritePos = param; 
    spritePos->x++;

    return interval;
}

The problem here is quite simple, I'm using codeblocks, when i save this file as a C file, it compiles with no problems, but once I save it as a C++ file, I have this error:

error: invalid conversion from 'void*' to 'SDL_Rect*'|

Does anyone have a clue on what's the problem here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

机场等船 2024-11-17 12:20:15

您的代码是有效的 C,而不是有效的 C++。您需要添加显式转换来编译

它 C 风格:

SDL_Rect* spritePos = (SDL_Rect *)param; 

或更 C++ 风格:

SDL_Rect* spritePos = static_cast<SDL_Rect *>(param); 

更好的解决方案是更改参数类型(如果您可能的话)。尽可能避免 void *

Your code is valid C, not valid C++. You need to add an explicit casting for it to compile

Either C-style:

SDL_Rect* spritePos = (SDL_Rect *)param; 

Or more C++-ish:

SDL_Rect* spritePos = static_cast<SDL_Rect *>(param); 

A better solution would be to change the parameter type instead if that's possible for you. Avoid void * whenever you can!

红尘作伴 2024-11-17 12:20:15

您需要将无类型指针转换为类型。例如:

SDL_Rect* spritePos = static_cast<SDL_Rect*>(param); 

阅读 C++ 中的转换。

You need to cast the typeless pointer to a type. For example:

SDL_Rect* spritePos = static_cast<SDL_Rect*>(param); 

Read up on casting in C++.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文