'name':模糊符号VisualStudio 2015

时间:2015-10-08 04:05:18

标签: c++ symbols

我的项目是迁移到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;
}

我收到“数据”和“尺寸”符号的错误。

最好的问候。

2 个答案:

答案 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(...);