2017-06-16 25 views
0

我昨天切換到新的筆記本電腦,並決定下載新的VS 2017社區。在我的舊筆記本電腦上,我使用了VS 2015 Enterprise。我有多箇舊項目給我這些錯誤。我已搜查甚廣,但只涉及的問題,我能找到的:錯誤的從vs15更新到vs17 660後出現錯誤

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; 
} 
+4

如果沒有看到導致此問題的[mcve]代碼,我們無法回答。雖然你「無法想象它是代碼」,我們仍然需要看到它。也許編譯器確實是錯誤的(不太可能),在這種情況下,我們需要代碼告訴你如何使它工作。或者(更可能)代碼實際上是不正確的,並且被用於「偶然」工作(由於VS <2017的獨立性),在這種情況下,我們需要再次查看它以告訴您問題是什麼。 – Angew

+0

這些不是編譯器錯誤,但Intellisense不理解代碼。如果您更改最右側下拉列表中的篩選器以僅生成錯誤,它們將消失。 –

+0

我添加了代碼Angew謝謝你通知我。另外@BoPersson的確是這個問題!感謝我一直在掙扎幾個小時。它是針對我沒有的Windows 8.1 sdk。 – Timon

回答

0

從一個猜測的更評價,其原來是一個解決方案:

在圖像中示出未編譯器錯誤的錯誤,但智能感知不正確理解的代碼。奇怪的是,IntelliSense基於一個單獨的編譯器(by EDG),並不總是與Visual C++編譯器完全同步。

如果將最右側下拉列表中的過濾器從「Build + IntelliSense」更改爲「Build Only」錯誤,這些消息將消失。