0
我想寫一個非常簡單的函數,它創建一個特定大小的矩陣,並帶有一個函數,該函數允許我初始化矩陣中的元素。簡單的東西,但我想同時嘗試更多的C++ 11功能。用元素初始化2d矩陣
template<class T, class Generator>
vector<vector<T> > create_matrix(int nr_rows, int nr_cols, Generator& gen) {
vector<vector<T> > matrix(nr_rows, vector<T>(nr_cols));
for (auto& row : matrix) {
generate_n(row.begin(), row.end(), gen);
}
return matrix;
}
// calling code
mt19937 engine;
uniform_int_distribution<int> dist(0, 9);
vector<vector<int> > matrix_a = create_matrix<int>(3, 4, [&]() {
return dist(engine);
});
編譯失敗,
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm(1562): error : no operator "+" matches these operands
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm(1532): error : no operator "<" matches these operands
的Visual Studio 2012(在CUDA SDK不具有VS2013官方支持,使沒有選項)下。那麼,我做錯了什麼以及如何解決它?
Visual Studio不能真正指出實際的錯誤是模板實例化失敗。 – Cubic
@Cubic g ++爲同樣的問題返回113條無用線的錯誤消息。 'clang'錯誤:對二進制表達式無效的操作數('decltype(__ n + 0)'(又名'__gnu_cxx :: __ normal_iterator>')和'int') '也不是那麼好(其他47條也沒有幫助)。所以是的,我認爲這是公平的錯誤C++的設計,使幾乎不可能爲簡單的錯誤提供良好的錯誤信息。 –
Voo