我正在运行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与我在原始系统上编译它的方式相比。
答案 0 :(得分:2)
当我升级日食时,这种情况一直发生在我身上。它有Member declaration not found
,invalid overload of endl
,Invalid arguments ...
的所有奇怪错误,现在我发现它是工作区中的信息,旧项目不是最新的CDT密码。实际上解决这个问题非常容易:Project->C/C++ index->Rebuild
。完成后,所有奇怪的错误都会消失。
答案 1 :(得分:1)
在尝试之前我尝试过刷新,清洁和重建3次,但似乎在发布后我尝试了第四次只是为了确定它看起来有效。
答案 2 :(得分:1)
此表达式无效:"Input" + number
。您不能只是将字符串文字与数字连接起来。那么你可以,但结果将不是你所期望的。
幸运的是,您正在编写C ++,这意味着您可以使用std::string
和std::to_string
(如果您有兼容C ++ 11的编译器):std::string("Input") + std::to_string(number)
。
如果您没有C ++ 11,因此没有std::to_string
,那么您可以使用例如the Boost lexical cast library或std::istringstream
格式化字符串或其他格式化函数/库。