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);
});
컴파일 비주얼 스튜디오 2012 (즉, NO 옵션 없다 그래서 CUDA SDK는 VS2013에 대한 공식 지원하지 않습니다)에서
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에서 실제 오류가 템플릿 인스턴스화에 실패했다는 사실을 나타내지 않는 것은 C++의 잘못이 아닙니다. – Cubic
같은 문제에 대한 @Cubic g ++은 도움이되지 않는 113 줄의 오류 메시지를 반환합니다. clang의 오류 : 이진 표현식에 대한 잘못된 피연산자 ('decltype (__ n + 0)'(일명 '__gnu_cxx :: __ normal_iterator>'및 'int')) '그다지 좋지는 않습니다 (47 개의 다른 라인도 도움이되지 않습니다). 그래서 네, 나는 C++을 단순한 오류에 대한 좋은 오류 메시지를 제공하는 것을 거의 불가능하게 만드는 오류 때문에 잘못했다고 생각합니다. –
Voo