从 vs15 更新到 vs17 后出现 660 错误

Posted

技术标签:

【中文标题】从 vs15 更新到 vs17 后出现 660 错误【英文标题】:After update from vs15 to vs17 660 errors appeared 【发布时间】:2017-06-16 10:55:48 【问题描述】:

我昨天换了一台新笔记本电脑,并决定下载新的 VS 2017 社区。在我的旧笔记本电脑上,我使用了 VS 2015 Enterprise。我有多个旧项目给了我这些错误。我进行了广泛搜索,但我能找到的唯一相关问题是:

Variable is not a type name error

错误截图:

发生这种情况的示例项目:

来源.cpp:

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <string>


using namespace cv;
using namespace std;

//Prototypes
int useFilter2D(int argc, char** argv);

int main(int argc, char** argv)

    useFilter2D(argc,argv);

    waitKey(0);


Mat image_canny, image_gray_canny;
Mat dst, detected_edges;

int edgeThresh = 1;
int lowThreshold;
int const max_lowThreshold = 100;
int ratio = 3;
int kernel_size = 3;
char* window_name = "Result";

void CannyThreshold(int, void*)

    /// Reduce noise with a kernel 3x3
    blur(image_gray_canny, detected_edges, Size(3, 3));

    /// Canny detector
    Canny(detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size);

    /// Using Canny's output as a mask, we display our result
    dst = Scalar::all(0);

    image_canny.copyTo(dst, detected_edges);
    imshow(window_name, dst);


int useFilter2D(int argc, char** argv)

    Mat src, src_gray;
    Mat grad;
    char* window_name = "Result Sobel";
    int scale = 1;
    int delta = 0;
    int ddepth = CV_16S;

    // Controle of er een argument aan het programma is meegegeven.
    if (argc != 2)
    
        cout << " Usage: display_image ImageToLoadAndDisplay" << endl;
        return -1;
    

    src = imread(argv[1], CV_LOAD_IMAGE_COLOR);

    // Controleer of alles goed is gegaan
    if (!src.data)
    
        cout << "Could not open or find the image" << std::endl;
        return -1;
    

    // Laat de afbeelding zien in een apart window
    namedWindow("Display window", WINDOW_AUTOSIZE);
    imshow("Display window", src);

    // convert to grey
    GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);
    cvtColor(src, src_gray, CV_BGR2GRAY);

    // Create window 
    namedWindow(window_name, CV_WINDOW_AUTOSIZE);

    Mat grad_x, grad_y;
    Mat abs_grad_x, abs_grad_y;

    /// Gradient X
    Sobel(src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT);
    convertScaleAbs(grad_x, abs_grad_x);

    /// Gradient Y
    Sobel(src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT);
    convertScaleAbs(grad_y, abs_grad_y);

    /// Total Gradient (approximate)
    addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);

    imshow(window_name, grad);

    waitKey(0);

    return 0;

【问题讨论】:

如果没有看到导致此问题的代码的minimal reproducible example,我们无法回答这个问题。虽然您“无法想象它是代码”,但我们仍然需要看到它。也许编译器真的出错了(不太可能),在这种情况下,我们需要代码告诉你如何让它工作。或者(更有可能)代码实际上是不正确的并且曾经“偶然”工作(由于 VS 那些不是编译器错误,而是 Intellisense 不理解代码。如果您将最右侧下拉列表中的过滤器更改为仅构建错误,它们就会消失。 我添加了代码 Angew 感谢您通知我。还有@BoPersson,这确实是问题所在!谢谢我已经为此苦苦挣扎了好几个小时。它针对的是我没有的 Windows 8.1 sdk。 @BoPersson 这应该是一个答案,我会说。 【参考方案1】:

从更多的 cmets 中猜测,结果证明是一个解决方案:

图片中显示的错误不是编译器错误,而是 IntelliSense 无法正确理解代码。看起来很奇怪,IntelliSense 基于一个单独的编译器 (by EDG),它并不总是与 Visual C++ 编译器完全同步。

如果您将最右侧下拉列表中的过滤器从“Build + IntelliSense”更改为“Build Only”错误,这些消息将消失。

【讨论】:

以上是关于从 vs15 更新到 vs17 后出现 660 错误的主要内容,如果未能解决你的问题,请参考以下文章

2017年TFS - VS 2017 15.5更新后默认为MSBuild 14。需要MSBuild 15回来

更新到 VS 2022 后无法构建

将 C# 项目从 VS 2005 移动到 VS 2013 后出现编译器错误

VS2010 c++编译的时候总是出现找不到exe文件、这是个啥情况

更新到 vs2017 15.2 后找不到 C 头文件

使用vs2008时,总是出现找不到指定文件的问题,但程序没有错。求高手指点!