2017-05-31 74 views
0

我正在研究一個需要將QCustomPlot FrameWork中的QCPGraph插入到std::multimap中的程序。注意:我對C++仍然很陌生。但是,我無法讓這個工作,這真是令人沮喪。無法在multiMap C++中插入QCustomPlot :: QCPGraph

這裏是我的代碼:

ui->customPlot->addGraph();   

/* 
    fill graph with some data 
*/ 

QCPGraph *graph = ui->customPlot->graph(0); 

std::multimap<int, std::pair<std::vector<double>, QCPGraph>, _comparator> myMap; 

//just for demo 
std::vector<double> vec; 
vec.at(0) = 2.2; 

myMap.insert(std::make_pair(1, std::make_pair(vec, graph))); 

最後一行給我下面的編譯器錯誤:

C:\path\mainwindow.cpp:178: Error: no matching function for call to 'std::multimap<int, std::pair<std::vector<double>, QCPGraph>, MainWindow::__comparator>::insert(std::pair<int, std::pair<std::vector<double>, QCPGraph*> >)' 
    myMap.insert(std::make_pair(1, std::make_pair(vec, graph))); 
                   ^

C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include\c++\bits\stl_multimap.h:524: Error: no type named 'type' in 'struct std::enable_if<false, void>' 
     template<typename _Pair, typename = typename 
           ^

我知道這可能與指針和類型的事情,但我可以」弄明白了。我試着給&graph(*graph)插入,這也沒有工作。請幫忙。

回答

0

您的容器:

std::multimap<int, std::pair<std::vector<double>, QCPGraph>> myMap; 

因此,它的value_type是:

std::pair<const int, std::pair<std::vector<double>, QCPGraph>> 

所以,當你有一個:

QCPGraph *graph = ui->customPlot->graph(0); 

你需要插入這樣的:

myMap.insert(std::make_pair(1, std::make_pair(vec, *graph))); 

還是在C++ 11:

myMap.emplace(1, std::make_pair(vec, *graph)); 

但我認爲該圖是爲了通過QCustomPlot所擁有,所以你應該指針實際存儲到它:

std::multimap<int, std::pair<std::vector<double>, QCPGraph*>> myMap; 
myMap.emplace(1, std::make_pair(vec, graph)); 
+0

謝謝!我知道這是一個非常愚蠢的錯誤! :o – masterBroesel