2013-08-05 2 views
1

VC++ 2012에서이 라인 코드를 사용하여 arrayCosts라는 통합 행 배열을 정렬했습니다. 이 코드는이 버전에서 작동하지만 VC++ 6 버전에서는 작동하지 않습니다.VC++ 6에서 벡터를 사용하여 배열을 정렬하는 중 오류가 발생했습니다. VC++ 2012에서 오류가 없습니다.

vector< vector<float> > my_vector ; 
for(const auto& row : arrayCosts) my_vector.push_back(vector<float>(begin(row), end(row))) ; 
     sort(begin(my_vector), end(my_vector), 
        [](const vector<float>& a, const vector<float>& b) { return a[1] < b[1] ; }) ; 

VC++ 6의 오류는 다음과 같습니다.

e:\logistics\projects\10\10\source1.cpp(190) : error C2143: syntax error : missing ',' before ':' 
e:\logistics\projects\10\10\source1.cpp(190) : error C2530: 'row' : references must be initialized 
e:\logistics\projects\10\10\source1.cpp(190) : error C2059: syntax error : ':' 
e:\logistics\projects\10\10\source1.cpp(191) : error C2065: 'begin' : undeclared identifier 
e:\logistics\projects\10\10\source1.cpp(191) : error C2065: 'end' : undeclared identifier 
e:\logistics\projects\10\10\source1.cpp(192) : error C2059: syntax error : '[' 
e:\logistics\projects\10\10\source1.cpp(192) : error C2143: syntax error : missing ')' before '{' 
e:\logistics\projects\10\10\source1.cpp(192) : error C2143: syntax error : missing ';' before '{' 
e:\logistics\projects\10\10\source1.cpp(192) : error C2065: 'a' : undeclared identifier 
e:\logistics\projects\10\10\source1.cpp(192) : error C2109: subscript requires array or pointer type 
e:\logistics\projects\10\10\source1.cpp(192) : error C2065: 'b' : undeclared identifier 
e:\logistics\projects\10\10\source1.cpp(192) : error C2109: subscript requires array or pointer type 
+4

VC++ 6.0은 15 세 이상입니다. 'auto'(유형 유추 키워드로 사용) 및 범위 기반 for 루프와 같은 C++ 11 구문을 지원하지 않습니다. –

+1

Dude - VC6?!?! CX11'for (const auto & row : arrayCosts) '루프가있는 1998 년경 컴파일러? VC6 Enterprise Edition을 구입하고 특별한 "사전 설정 스위치"로 컴파일하는 경우에만 작동합니다. – paulsm4

+1

아마도 Microsoft에 버그 리포트를 제출해야합니까? –

답변

5

2011 년부터 1997 년의 컴파일러에서 언어 기능을 사용하려고합니다. 작동하지 않을 것입니다.

C++ 98을 계속 사용하면 더 많은 성공을 거둘 수 있습니다. 비록 컴파일러가 그것보다 훨씬 앞서기는하지만, 이것이 작동한다는 보장은 없습니다.

// Define a comparison functor, to replace the lambda. 
// This must be defined outside a function, for arcane reasons. 
struct comparator { 
    bool operator()(const vector<float>& a, const vector<float>& b) { 
     return a[1] < b[1]; 
    } 
}; 

vector< vector<float> > my_vector ; 

// Use an old-school for loop; range-based loops didn't exist back then, 
// and neither did "auto" type deduction. 
// (This assumes arrayCosts is also a vector<vector<float>>; 
// change the iterator type if it's something else). 
for (vector< vector<float> >::const_iterator it = arrayCosts.begin(); 
    it != arrayCosts.end(); ++it) 
{ 
    // std::begin and std::end didn't exist either 
    my_vector.push_back(vector<float>(it->begin(), it->end())) ; 
} 

// Again, no std::begin or std::end. 
sort(my_vector.begin(), my_vector.end(), comparator()); 
+0

이것이 작동 할 것 같아요. 우리는 Visual C++ 6을 사용하여 많은 게임을 출하했으며 확실하게 벡터를 정렬했습니다. :) –