~!@#¥% 2021-07-11 11:57 采纳率: 100%
浏览 125
已采纳

书中参考代码经编译后出现重定义及实参与形参不兼容等问题

起因:操作系统的书中的参考代码(代码在其他的编译器上应该是可以正常运行的)。
问题:

#include<Windows.h>
#include<stdio.h>
struct SHFILEOPSTRUCT {
    HWND hwnd;
    UINT wfunc;
    LPCTSTR pfrom;
    LPCTSTR pto;
    FILEOP_FLAGS fflags;
    BOOL fanyoperationalborted;
    LPVOID hnamemapping;
    LPCTSTR lpszprogresstitle;
};
int main()
{
    int nok;
    char strsrc[] = "c:\\dos\0";
    char strdst[] = "c:\\temp\0";
    char strtitle[] = "file copying";
    SHFILEOPSTRUCT fileop;
    fileop.hwnd = NULL;
    fileop.wfunc = FO_COPY;
    fileop.pfrom = strsrc;
    fileop.pto = strdst;
    fileop.fflags = FOF_ALLOWUNDO;
    fileop.hnamemapping = NULL;
    fileop.lpszprogresstitle = strtitle;
    nok = SHFileOperation(&fileop);
    if (nok)
        printf("出错:      %d\n", nok);
    else
    {
        printf("文件目录操作成功结束!\n");
        if (fileop.fanyoperationalborted)
            printf("撤销文件操作!\n");
    }
}

在visual studio 2017上编译后出现了三个错误:
①C2371 “SHFILEOPSTRUCT”: 重定义;不同的基类型;
②C2664 “int SHFileOperationA(LPSHFILEOPSTRUCTA)”: 无法将参数 1 从“SHFILEOPSTRUCT *”转换为“LPSHFILEOPSTRUCTA”;
③E0167 "SHFILEOPSTRUCT *" 类型的实参与 "LPSHFILEOPSTRUCTA" 类型的形参不兼容;

img

我依照着https://bbs.csdn.net/topics/392421327?page=1,此连接中的解决方案试了还是不行,也参考了微软的编译错误提示,我找不到问题出现的原因。

  • 写回答

3条回答 默认 最新

  • ~!@#¥% 2021-07-11 22:35
    关注
    typedef struct _SHFILEOPSTRUCTA {
        HWND         hwnd;
        UINT         wFunc;
        PCZZSTR      pFrom;
        PCZZSTR      pTo;
        FILEOP_FLAGS fFlags;
        BOOL         fAnyOperationsAborted;
        LPVOID       hNameMappings;
        PCSTR        lpszProgressTitle;
    } SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;
    

    上述为c++中该结构体的定义。
    排错的过程中,我越发的觉得问题都出自那个重名的结构体,所以查找到该源码的结构体https://blog.csdn.net/robot_2/article/details/1530400,依照该结构体更改代码后即可正常运行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已采纳回答 7月11日
  • 修改了问题 7月11日
  • 创建了问题 7月11日

悬赏问题

  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?