求助:Error C2511,一个很奇怪的问题。大侠们给个提示,谢谢!

David_7678 2007-12-28 11:29:37
说一下问题的现象:

本来一切正常,向视图类加入#include "CMPJPEGCodec.h"后,编译提示:
coolmpexview.cpp(709) : error C2511: 'my_SetBMPINFO' : overloaded member function 'void (struct tagBITMAPINFOHEADER *,long,long,int,unsigned short,int)' not found in 'CCoolMPExView'
e:\work\2007-12\coolmpex\coolmpexview.h(16) : see declaration of 'CCoolMPExView'

把这个头文件去掉后,又没问题了。我检查了,没有拼写等低级错误。

btw,这个头文件在doc类里include了一次,没有发现错误。

很是怪异,看半天了,没有一点头绪,哥几个帮忙分析一下。谢谢!

...全文
308 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang1989111 2011-08-02
  • 打赏
  • 举报
回复
o .............
iyranly 2007-12-28
  • 打赏
  • 举报
回复
错误说得很明白了,你的'CCoolMPExView' 类中没有定义这个成员函数,或者定义了的这个函数参数与cpp中的参数不一样导致。

'identifier' : overloaded member function not found in 'class'

The specified function was not declared for the given parameters. In all the versions of the overloaded function, none of them had the same parameters in the same order as specified in the erroneous function call.

This error can be caused by a mismatch in the parameter list of the specified function.

解决方法:
Ensure that the correct arguments are being passed when calling the function.

Make sure the arguments are in the correct order when calling the function.
对比检查函数中参数的顺序是否和定义时候的一样。
Make sure the argument names are spelled correctly.
对比检查函数的拼写是否正确。

还有,你这个CMPJPEGCodec.h是做什么的?
coffeaddice 2007-12-28
  • 打赏
  • 举报
回复
struct tagBITMAPINFOHEADER *

看这个结构体定义在哪里   在你引用的头文件里是否调用别的头文件

路径是否设置正确
David_7678 2007-12-28
  • 打赏
  • 举报
回复
搞定了。

就是因为不同的类中对类型重新定义了的缘故!

我的程序里面包括了其他同事的代码,机会每个人都在自己的定义中增加了对DWORD和WORD的定义。可是定义的时候却不是按照标准来的,
有的是 typedef unsigned long DWORD; 有的直接#define DWORD int ,错就错在后面这条语句了。很少有人写的robust一点,比如:

#ifndef DWORD
typedef unsigned long DWORD;
#endif

所以,我在include包含后面语句的头文件时就会出错。

——很小的一个问题,害得我找了一上午,叹。。。
谢谢各位!
pig_2000 2007-12-28
  • 打赏
  • 举报
回复
所有的头文件里加上#pragma once
superarhow 2007-12-28
  • 打赏
  • 举报
回复
根据偶的经验LPBITMAPINFOHEADER这个类型经常被重定义,至少在windows的头和dx的头文件中就各有一套。而且经常有人用#define语句来定义这些类型。平时使用的时候,后定义的会覆盖掉先定义的所以不会出错。lz试一下以下的操作步骤:
1.分别在C***view.h和C***view.cpp中,用F12查找LPBITMAPINFOHEADER的定义,看是否一致;
2.去掉C***view.cpp包含的所有的头文件,包括stdafx.h,(选项中选择不要预编译头),只留下C***view.h,然后再编译。
David_7678 2007-12-28
  • 打赏
  • 举报
回复
to:sangermax

重新编译多次了,

to Pig_2000,在头文件中定义了,都是void类型。

现在其他可能的原因就是工程比较大,对tagBITMAPINFOHEADER之类的变量重新定义了。

还可能有其他地方出错吗?出错的函数在视图类里面定义的,原型如下:
C***view.h

void my_SetBMPINFO(LPBITMAPINFOHEADER BmpInfoHeader,long biWidth,long biHeight,DWORD biSize,WORD biBitCount,DWORD biCompression);

C***view.cpp

void CCoolMPExView::my_SetBMPINFO(LPBITMAPINFOHEADER BmpInfoHeader, long biWidth,long biHeight,DWORD biSize, WORD biBitCount,DWORD biCompression)
{
//body, 主要是一些赋值操作。
}
pig_2000 2007-12-28
  • 打赏
  • 举报
回复
my_SetBMPINFO函数在CCoolMPExView类中没定义。
看看函数的返回值类型是否一样。
缺省的情况是int,不是void
shakaqrj 2007-12-28
  • 打赏
  • 举报
回复
shakaqrj@yahoo.com.cn
发给我看看
mr.zhoux 2007-12-28
  • 打赏
  • 举报
回复
你没重编译吧?...一般都是少头文件哎

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧