Eclipse给予了#34;怪异的"有关opencv的错误

时间:2014-08-14 05:01:41

标签: c++ eclipse opencv compiler-errors

我正在运行ubuntu 12.04。 我有一个我在Eclipse中编写和编译的c ++项目(luna之前的版本)。我的系统有一些问题,不得不重新安装操作系统。现在我正在使用Eclipse luna,当使用一些openCV功能时,该项目会出现一个奇怪的错误。

当我使用cv::namedWindow()cv::imshow()时,我遇到了错误。 错误是:

这是eclipse控制台输出:

00:21:45 **** Incremental Build of configuration Debug for project MySOM ****
make all 
Building target: MySOM
Invoking: Cross G++ Linker
g++ -L/usr/local/lib -o "MySOM"  ./src/LoadFile.o ./src/Model.o ./src/Node.o ./src/SOM.o ./src/main.o   -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab
Finished building target: MySOM


00:21:45 Build Finished (took 210ms)

它看起来如上所述但是......

以下是eclipse中的Problems选项卡:

Description Resource    Path    Location    Type

Invalid arguments '
Candidates are:
bool imwrite(const ? &, const cv::_InputArray &, const ? &)
'   SOM.cpp /MySOM/src  line 211    Semantic Error

Invalid arguments '
Candidates are:
cv::Mat imread(const ? &, int)
'   LoadFile.cpp    /MySOM/src  line 10 Semantic Error

Invalid arguments '
Candidates are:
void imshow(const ? &, const cv::_InputArray &)
'   main.cpp    /MySOM/src  line 22 Semantic Error

Invalid arguments '
Candidates are:
void namedWindow(const ? &, int)
'   main.cpp    /MySOM/src  line 21 Semantic Error

的main.cpp

#include "Node.h"
#include <iostream>
#include "SOM.h"
#include <string>
#include "opencv2/core/core.hpp"
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>//FOR TESTING



void MyPause(std::string msg){
    if(msg != ""){
        std::cout << "[+] " << msg << std::endl;
    }
    std::cout << "Press enter to continue" << std::endl;
    std::cin.get();
}

void DisplayMat(cv::Mat img){
    static int number = 0;
    cv::namedWindow( "Input" + number, cv::WINDOW_AUTOSIZE );// ERROR HERE
    cv::imshow( "Input" + number, img );//ERROR HERE
    cv::waitKey(0);
    number++;
    return;
}


std::string filename = "/home/myUserName/Code/projectFiles/testMedia/myYellow.jpg";


int main(){

    //cv::Mat inputImg = LoadFile(filename);

    SOM som(filename);
    MyPause("After SOM initialization");
    DisplayMat(som.inputImg);

    MyPause("END OF MAIN");
    return 0;
}

我想知道这是否会发生,因为我现在编译opencv与我在原始系统上编译它的方式相比。

3 个答案:

答案 0 :(得分:2)

当我升级日食时,这种情况一直发生在我身上。它有Member declaration not foundinvalid overload of endlInvalid arguments ...的所有奇怪错误,现在我发现它是工作区中的信息,旧项目不是最新的CDT密码。实际上解决这个问题非常容易:Project->C/C++ index->Rebuild。完成后,所有奇怪的错误都会消失。

答案 1 :(得分:1)

在尝试之前我尝试过刷新,清洁和重建3次,但似乎在发布后我尝试了第四次只是为了确定它看起来有效。

答案 2 :(得分:1)

此表达式无效:"Input" + number。您不能只是将字符串文字与数字连接起来。那么你可以,但结果将不是你所期望的。

幸运的是,您正在编写C ++,这意味着您可以使用std::stringstd::to_string(如果您有兼容C ++ 11的编译器):std::string("Input") + std::to_string(number)

如果您没有C ++ 11,因此没有std::to_string,那么您可以使用例如the Boost lexical cast librarystd::istringstream格式化字符串或其他格式化函数/库。