2013-07-05 2 views
0

어떤 이유로 든이 클래스에서이 2 차원 벡터 크기를 조정할 수 없습니다. 당신의 도움을 주셔서 감사합니다!2 차원 벡터 크기 조정 - 오류

.. 
Map::Map(const unsigned int& w, 
     const unsigned int& h, 
     const unsigned int& s) 
    : width(w), height(h), size(s) 
{ 
    squares.resize(width); 
    for (unsigned int i = 0; i < width; ++i) 
    { 
     squares[i].resize(height); // error here 
     for (unsigned int j = 0; j < height; ++j) 
     { 
      squares[i][j] = Square(sf::Vector2f(i * size, j * size)); 
     } 
    } 
} 

std::vector<std::vector<Square>> squares; 
.. 

일부 오류 메시지 :

C : \와 Mingw 빈 \ .. \ lib 디렉토리 \의 gcc \ mingw32 \ 4.6.2 \는 \ C++ \ 비트 \ stl_uninitialized.h을 포함 | 481 | static void std :: __ uninitialized_default_n_1 < TrivialValueType> :: _uninit_default_n (_ForwardIterator = _Size) [_ForwardIterator = Square, _Size = 부호없는 정수, bool _TrivialValueType = false]

c : \ mingw \ bin .. \ lib \ gcc \ mingw32 \ 4.6.2 \ include \ C++ \ bits \ stl_uninitialized.h | 529 | 무한 std :: __ uninitialized_default_n (_ForwardIterator, _Size) [_ForwardIterator = Square *, _Size = unsigned int]로 초기화합니다.

+0

스퀘어에는 기본 생성자가 있습니까? – Peter

+1

중첩 벡터 대신 boost :: multi_array 사용을 고려하십시오. – aryjczyk

+0

예, 기본 생성자가 있습니다. Square (const sf :: Vector2f & pos); – user1429101

답변

0

vector.resize (n) 및 n> vector.size()를 사용하면 n - vector.size() 새 요소를 생성하라는 메시지가 표시됩니다. Vector는 기본으로 설정해야합니다. 왜냐하면 어떤 인수를 사용해야할지 모르기 때문입니다. 기본 구성 가능하지 않으면 크기 조정에 실패합니다.

그러나 Square를 기본 구성 가능으로 설정하지 않으려면 실패한 행을 vector.reserve()로 변경할 수 있습니다. 이는 새로운 요소를위한 충분한 공간 만 확보하지만 실제로는 만들지 않습니다. 그런 다음

squares[i].emplace_back(sf::Vector2f(i * size, j * size)); 

아를 사용하여 루프에서 하나씩 만들고, 참조로 길을 통과 프리미티브에 의해 수있는 최적의 성능을 가지고있다. 매개 변수를 필요로하지 않는 한 값으로 전달하십시오.

+0

기본 유형이 아닌 경우 메서드 매개 변수에서만 const 참조를 사용하는 것이 좋습니다. – user1429101

+0

일반적으로 밖으로 논쟁을 지나치지 않고 있습니다. 값 또는 const 참조로 sed. 2 가지 차이점이 있습니다. 1) 성능 - 값에 의한 전달은 객체를 복사하고, 참조를 지나가는 포인터는 포인터를 지나가고 있으므로 간접적 인 수준이 있으므로 참조로 값과 큰 값으로 작은 값을 전달하려고합니다. 나는 16B가 x86의 좋은 문턱이지만, 그것은 규칙보다 더 많은 지침을 가지고있다. 만약 당신이 퍼시픽 크리티컬 한 영역에 많은 작은 구조체를 넘겨주는 코드를 작성했다면 그것을 프로파일 링하여 가장 좋은 것을 찾아야합니다. – aryjczyk

+0

2) 인자에 대해 중간이 아닌 비 const 계산을 수행하려면, 그것을 복사해야합니다 어쨌든 큰 경우에도 값으로 전달하는 것이 좋습니다. – aryjczyk