2015-07-21 75 views
0

我在觀察編譯錯誤「error:could not convert'{{{{{{{{{{{{{{{{{{{} {'} {'} std :: vector'「在下面的代碼中。無法從大括號初始化程序列表轉換爲向量

我在做矢量插入錯了嗎? 順便說一句我不想使用push_back方法。是否可以使用'='插入。 我有一種感覺,它是語法錯誤,但無法找到它。

當谷歌搜索時,我發現早期版本的gcc中存在一個錯誤。我正在使用4.8.1,所以我假設我正在使用的庫應該包含修復程序。

#include <functional> 
#include <iostream> 
#include <vector> 

struct Foo { 
    Foo(int num) : num_(num) {} 
    void print_add(int i) const { std::cout << num_+i << '\n'; } 
    int num_; 
}; 

struct X { 
    void print() { 
    std::cout << "I'm in X "<<std::endl; 
    } 
}; 

struct XXX { 
    std::function<void(const Foo&,int)> a; 
    std::function<void(const X&)> b; 
}; 

int main() 
{ 
    std::vector<XXX> vec = 
    { 
    { 
     {&Foo::print_add}, 
     {&X::print} 
    } 
}; 
} 

回答

2

X::print是非const成員函數,因此指向它的指針不能被用來初始化一個std::function<void(const X&)>

+0

非常感謝T.C.是的,我錯過了函數中的const :) –

+0

另一個快速問題。我們不可能有地圖正確或有方法嗎? –

+0

@GanapathySubramanian你爲什麼要這樣的東西? – VermillionAzure

相關問題