【问题标题】:What is the cause of these Visual Studio 2010 errors & warnings?这些 Visual Studio 2010 错误和警告的原因是什么?
【发布时间】:2011-02-11 23:35:18
【问题描述】:

我不知道我从 Visual Studio 2010 收到这些错误的原因。

这是我的程序从第 343 行到第 408 行的代码:

int create_den_from_img(char *img_file_name_part, int xlen, int ylen, int zlen )
{
  IplImage* imgs = 0;
  char str[80];
  unsigned char *data,*imgdata;

  /* allocating memory */
  data = (unsigned char *) malloc(xlen * ylen * zlen * sizeof(unsigned char) );
  if(data==NULL)
  {
    printf("error in allocating memory \n");
    exit(1);
  }

  /* Getting the filename & iterating through tiff images */

    for(int k = 0; k < zlen; k++)
    {   
        int count=2;
        int tmp=k+1;
        while(tmp/10)
        {
            count=count-1;
            tmp=tmp/10;
        }

        switch(count)
        {
            case 2:sprintf(str,"%s00%d.tif",img_file_name_part,k+1);
                    break;
            case 1:sprintf(str,"%s0%d.tif",img_file_name_part,k+1);
                    break;  
            default:sprintf(str,"%s%d.tif",img_file_name_part,k+1);
                    break;
        }
        printf("%s\n",str);

        /* Loading Image using OpenCV */
        imgs=cvLoadImage(str,-1);
        if(imgs==NULL)
        {
            printf("error in opening image \n");
            exit(1);
        }
        imgdata=(uchar *)imgs->imageData;

        for(int j =0; j < ylen; j++)
        {
            for(int i =0; i < xlen; i++)
            {
                data[ k*xlen*ylen + j*xlen + i ] = imgdata[ j*xlen+i ];
            }
        }

        cvReleaseImage(&imgs );
    }

    /* populating `data` variable is done. So, calling `write_den` */
    if(write_den("test.den",data,xlen,ylen,zlen)==0)
    {
        printf("Error in creating den file\n");
        exit(1);
    }
    printf("Den file created\n");

}

这些是错误列表:

错误 3 错误 C2143:语法错误:缺少 ';'在“类型”之前 c:\examples\denfile.c 358 1 MTP_TEST 错误 4 错误 C2143:语法错误:缺少 ';'在“类型”之前 c:\examples\denfile.c 358 1 MTP_TEST 错误 5 错误 C2143:语法错误:在 'type' c:\examples\denfile.c 358 1 MTP_TEST 之前缺少 ')' 错误 6 错误 C2143:语法错误:缺少 ';'在“类型”之前 c:\examples\denfile.c 358 1 MTP_TEST 错误 7 错误 C2065:“k”:未声明的标识符 c:\examples\denfile.c 358 1 MTP_TEST 错误 9 错误 C2065:“k”:未声明的标识符 c:\examples\denfile.c 358 1 MTP_TEST 错误 10 错误 C2059:语法错误:')' c:\examples\denfile.c 358 1 MTP_TEST 错误 11 错误 C2143:语法错误:缺少 ';'在'{'之前 c:\examples\denfile.c 359 1 MTP_TEST 错误 12 错误 C2065:“k”:未声明的标识符 c:\examples\denfile.c 361 1 MTP_TEST 错误 13 错误 C2065:“k”:未声明的标识符 c:\examples\denfile.c 370 1 MTP_TEST 错误 14 错误 C2065:“k”:未声明的标识符 c:\examples\denfile.c 372 1 MTP_TEST 错误 15 错误 C2065:“k”:未声明的标识符 c:\examples\denfile.c 374 1 MTP_TEST 错误 16 错误 C2143:语法错误:缺少 ';'在“类型”之前 c:\examples\denfile.c 388 1 MTP_TEST 错误 17 错误 C2143:语法错误:缺少 ';'在“类型”之前 c:\examples\denfile.c 388 1 MTP_TEST 错误 18 错误 C2143:语法错误:在 'type' c:\examples\denfile.c 388 1 MTP_TEST 之前缺少 ')' 错误 19 错误 C2143:语法错误:缺少 ';'在“类型”之前 c:\examples\denfile.c 388 1 MTP_TEST 错误 20 错误 C2065:“j”:未声明的标识符 c:\examples\denfile.c 388 1 MTP_TEST 错误 22 错误 C2065:'j':未声明的标识符 c:\examples\denfile.c 388 1 MTP_TEST 错误 23 错误 C2059:语法错误:')' c:\examples\denfile.c 388 1 MTP_TEST 错误 24 错误 C2143:语法错误:缺少 ';'在'{'之前 c:\examples\denfile.c 389 1 MTP_TEST 错误 25 错误 C2143:语法错误:缺少 ';'在“类型”之前 c:\examples\denfile.c 390 1 MTP_TEST 错误 26 错误 C2143:语法错误:缺少 ';'在“类型”之前 c:\examples\denfile.c 390 1 MTP_TEST 错误 27 错误 C2143:语法错误:在 'type' c:\examples\denfile.c 390 1 MTP_TEST 之前缺少 ')' 错误 28 错误 C2143:语法错误:缺少 ';'在“类型”之前 c:\examples\denfile.c 390 1 MTP_TEST 错误 29 错误 C2065:“i”:未声明的标识符 c:\examples\denfile.c 390 1 MTP_TEST 错误 31 错误 C2065:“i”:未声明的标识符 c:\examples\denfile.c 390 1 MTP_TEST 错误 32 错误 C2059:语法错误:')' c:\examples\denfile.c 390 1 MTP_TEST 错误 33 错误 C2143:语法错误:缺少 ';'在'{'之前 c:\examples\denfile.c 391 1 MTP_TEST 错误 34 错误 C2065:“k”:未声明的标识符 c:\examples\denfile.c 392 1 MTP_TEST 错误 35 错误 C2065:'j':未声明的标识符 c:\examples\denfile.c 392 1 MTP_TEST 错误 36 错误 C2065:'i':未声明的标识符 c:\examples\denfile.c 392 1 MTP_TEST 错误 37 错误 C2065:“j”:未声明的标识符 c:\examples\denfile.c 392 1 MTP_TEST 错误 38 错误 C2065:“i”:未声明的标识符 c:\examples\denfile.c 392 1 MTP_TEST

我整天都遇到这些错误。有时代码会编译,而有时则不会。真的很烦人。

【问题讨论】:

  • 您是否从其他编辑器/网络浏览器复制/粘贴了一些代码?当粘贴的代码中存在隐藏字符时,我曾经遇到过这样的问题。
  • 无意冒犯,但我认为问题不在于 MSVC。
  • 你传递给编译器的命令行标志是什么?
  • @Eric Sc​​hweichler :不,我没有复制粘贴此代码。它完全是手写的。 @Billy ONeal:我也这么认为。但我自己找不到错误。
  • 个人认为,如果编译器不能输出有用的错误信息,我认为是编译器的问题。如果你不得不说,“错误信息很有帮助——任何拥有 5 年 Visual C++ 日常经验的人都可以理解它!” (或类似的)来保护编译器,你只是在证明我的观点。

标签: c++ c visual-studio-2010


【解决方案1】:

您正在编译一个.c 文件,这对于 Microsoft Visual Studio 意味着您需要编写 C89(又名 C90)代码,而不是 C99 代码或 C++。

这意味着您必须在每个块的开头声明变量。这意味着你不能这样做:

for (int k = 0; ...

您必须在块的开头声明k 并执行以下操作:

for (k = 0; ...

【讨论】:

  • 或者直接编译成C++代码。这也是所有有效的 C++。 +1。
  • @Billy:我在哪里可以设置这些不同的语言?
  • @Charles Bailey:如果应该使用 c89/c99/c++,我在哪里可以找到设置选项?
  • 什么? MSVC 不支持 C99?怎么会?已经10多年了。为什么不支持? AFAIK,编译器竞争“谁先添加新功能?”
  • MS 没有参加 C 比赛。 stackoverflow.com/questions/146381/…
【解决方案2】:

在第 343 行之前的类/结构声明后是否缺少分号?

您可以做的一件事是尝试使用其他编译器,看看您是否收到了更能说明问题的不同错误消息。比如Comeau online

否则,您的代码中是否有一些流氓#defines 或某些包含?既然这种情况不会一直发生,有人会捉弄你吗?尝试检查预处理后的输出。

【讨论】:

  • 不。彻底检查。我什至尝试只删除这段代码并进行编译。它编译得很好。
  • @JRL:第一个错误出现在这个函数内的第一个 for 循环中——我认为如果它是一个缺少的类结束分号,那么当 int 在开始时遇到错误函数定义。但良好的心理调试——这是我要检查的第一件事。 +1。
猜你喜欢
  • 2011-03-07
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多