相关疑难解决方法(0)

408
推荐指数
8
解决办法
18万
查看次数

从HGDIOBJ转换为HBRUSH

(在使用g ++编译器的Win32API上下文中询问此问题).我很难理解为什么以下代码行不起作用

wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);
Run Code Online (Sandbox Code Playgroud)

wndclass是WNDCLASSEX结构的一个实例,Windows API明确指出其成员hbrBackground的类型是HBRUSH.此外,HBRUSH只是HANDLE的typedef,而HANDLE又是void*的typedef.因此,HBRUSH应为void*类型.现在,GetStockObject函数的返回类型是HGDIOBJ,它也被命名为HANDLE,因此是void*.

Windows数据类型 http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx

GetStockObject http://msdn.microsoft.com/en-us/library/dd144925(v=vs.85).aspx

WNDCLASSEX http://msdn.microsoft.com/en-us/library/windows/desktop/ms633577(v=vs.85).aspx

为什么编译时会出现以下错误:

invalid conversion from 'HGDIOBJ {aka void*}' to 'HBRUSH' [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

如果我从GetStockObject显式地转换返回的值,它可以工作

wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
Run Code Online (Sandbox Code Playgroud)

感谢您的任何帮助.

c++ winapi g++

4
推荐指数
1
解决办法
2242
查看次数

为什么在C++中必须使用void指针进行类型转换?

我一直在使用类似的代码在嵌入式C中多次跟随.

#include <stdio.h>

int g_uArray[5] =
{ 1, 1, 2, 3, 5};

void* foo( int uIndex );

int main()
{
    int* uVar;
    uVar = foo( 2 );
    printf( "Value = %u\n", *uVar );
    return 0;
}

void* foo( int uIndex )
{
    return (void*) &g_uArray[uIndex];
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在使用gcc编译时非常有效,但在使用g ++编译时会抛出错误

invalid conversion from ‘void*’ to ‘int*’
Run Code Online (Sandbox Code Playgroud)

换行

uVar = foo( 2 );
Run Code Online (Sandbox Code Playgroud)

但是它可以通过给出-fpermissive标志来编译.现在,我的问题是为什么C++给出错误是非常重要的(gcc -Wall甚至没有给出警告).如果我使用-fpermissive进行编译会产生一些运行时问题吗?

c c++

3
推荐指数
1
解决办法
375
查看次数

编译c代码时如何让g++忽略calloc指针类型错误

例如,下面的行可以用 gcc 编译,

float *m = calloc(rows*cols, sizeof(float));
Run Code Online (Sandbox Code Playgroud)

但是 g++ 抱怨指针类型不匹配,如下所示。

../../../../../YOLO/darknet/src/gemm.c:33:22:错误:从“void*”到“float*”的无效转换

(也许 callc 在 C++ 中总是返回 void* ?)
我可以让 g++ 忽略这个指针类型不匹配错误吗?(我找到了这个链接,但他们说这是不可避免的。如果我们可以在 C++ 代码中使用 C 代码而无需在任何地方修复它,那就太好了。)

c c++ pointers compiler-errors g++

0
推荐指数
1
解决办法
103
查看次数