VC对话框工程下添加新的.cpp,.h文件编译不通过,重定义
原先在dlg.cpp文件下,通过将函数原型和函数声明加入,并添加以下三个头文件可以正常使用
- C/C++ code
#include <imaging.h>#include <initguid.h>#include <imgguids.h>
现在打算将这几个函数写成cpp和h的形式,编译出错,出现imgguids.h中的变量重定义错误。文件如下:
.h文件:
- C/C++ code
#ifndef _JPG_IMGFAC_LIB_H_#define _JPG_IMGFAC_LIB_H_#include <imaging.h>#include <initguid.h>#include <imgguids.h>void ConvBmp2jpg(char *bmpbuf, int bmpsize, char *jpgbuf, int *jpgsize);void ConvJpg2bmp(char *jpgbuf, int jpgsize, char *bmpbuf, int *bmpsize);BOOL CreateStreamOnBuffer(const char * pBuffer, DWORD bufsize, IStream ** ppStream);BOOL GetEnCodecCLSID(IImagingFactory* pImagingFactory,WCHAR * wszMimeType ,CLSID * pclsid );#endif
.cpp文件:
- C/C++ code
//#include "StdAfx.h"#include "jpgimgfaclib.h"void ConvBmp2jpg(char *bmpbuf, int bmpsize, char *jpgbuf, int *jpgsize)//后面是每个函数的实现{出现的错误如下:
mv4i\imgguids.h(87) : error C2374: 'ENCODER_LUMINANCE_TABLE' : redefinition; multiple initialization
d:\program files\windows ce tools\wce500\yc2440\include\armv4i\imgguids.h(87) : see declaration of 'ENCODER_LUMINANCE_TABLE'
d:\program files\windows ce tools\wce500\yc2440\include\armv4i\imgguids.h(88) : error C2374: 'ENCODER_CHROMINANCE_TABLE' : redefinition; multiple initialization
d:\program files\windows ce tools\wce500\yc2440\include\armv4i\imgguids.h(88) : see declaration of 'ENCODER_CHROMINANCE_TABLE'
d:\program files\windows ce tools\wce500\yc2440\include\armv4i\imgguids.h(89) : error C2374: 'ENCODER_SAVE_FLAG' : redefinition; multiple initialization
d:\program files\windows ce tools\wce500\yc2440\include\armv4i\imgguids.h(89) : see declaration of 'ENCODER_SAVE_FLAG'
我的.h文件在.cpp中包含了一次,在对话框工程dlg.cpp中包含了一次,感觉我的.h中的#ifndef这个宏没起作用似的。
请帮我看看是什么原因啊?只有37分了
谢谢了
[解决办法]
'ENCODER_LUMINANCE_TABLE' 放在CPP文件里定义试试,其它的也这么试
[解决办法]
h文件用#pragma once试试
[解决办法]
你把这三个文件放到stdafx.h中,这样以后不用每次编译这3个头文件了。
[解决办法]
就这个一个错误么?
ENCODER_LUMINANCE_TABLE 定义的时候弄个预编译
就像你上面写的那样
#ifndef _JPG_IMGFAC_LIB_H_
#define _JPG_IMGFAC_LIB_H_
#endif