我的项目是迁移到Visual Studio 2015。 但是,当我看到收到13个错误时,我就陷入了困境。
错误C2872'数据':模糊符号 错误C2872'大小':模糊符号
在迁移到vss2015之前,一切都运行良好,我无法理解为什么在收到此错误后我们移动了程序。
这是我的Jpeg.h
#pragma once
int jpeg_save(unsigned char*data, int width, int height, int quality, const char*filename);
int jpeg_save_to_file(unsigned char*data, int width, int height, int quality, FILE*fi);
int jpeg_save_to_mem(unsigned char*data, int width, int height, int quality, unsigned char*dest, int destsize);
int jpeg_load(const char*filename, unsigned char**dest, int*width, int*height);
int jpeg_load_from_mem(unsigned char*_data, int size, unsigned char*dest, int width, int height);
这是我的jpeg.cpp
void mem_init_source (j_decompress_ptr cinfo)
{
struct jpeg_source_mgr* mgr = cinfo->src;
mgr->next_input_byte = data;
mgr->bytes_in_buffer = size;
}
我收到“数据”和“尺寸”符号的错误。
最好的问候。
答案 0 :(得分:1)
您的某些函数具有名为data和size的局部变量,导致与同名的全局变量冲突。
static unsigned char*data;
static int size;
...
int jpeg_save_to_file(unsigned char*data, int width, int height, int quality, FILE*fi);
int jpeg_load_from_mem(unsigned char*_data, int size, unsigned char*dest, int width, int height);
...
...在编译代码时导致冲突
答案 1 :(得分:0)
例如,你有一个全局变量数据然后你有一个名为data的函数参数,所以编译器很困惑使用哪个 - 我知道我会。
最简单的解决方法是在全局变量周围放置命名空间,这样在访问全局变量或局部变量时就更清楚了。
E.g。
namespace globals
{
static FILE*fi;
static JOCTET * buffer;
static unsigned char*dest;
static int len;
static int destlen;
static unsigned char*data;
static int pos;
static int size;
};
...
int jpeg_save(unsigned char*data, int width, int height, int quality, const char*filename)
{
globals::data = ...;
}
ALT。使用未命名的命名空间
namespace
{
static FILE* fi;
...
}
...
::fi = fopen(...);