ошибка xmemory - отсутствует поддержка c ++ 0x? - PullRequest
3 голосов
/ 22 ноября 2011

Я создал приложение winform, в котором я использовал векторы типа array [n] [n], используя

typedef char myarray[9][9];  
typedef vector<myarray> array3d; 

, насколько я прочитал, эта функция предоставляется в c ++ 0x.Я использую Visual Studio 2010 Ultimate является ошибка в xmemory из-за этого?Ide не показывает никакой другой ошибки, кроме этой (даже там, где указан код выше)

'Target of operator new()' : array initialization needs curly braces

, указывающий на этот код в xmemory

void construct(pointer _Ptr, _Ty&& _Val)
    {   // construct object at _Ptr with value _Val
    ::new ((void _FARQ *)_Ptr) _Ty(_STD forward<_Ty>(_Val));
    }

В коде более 2,5 kлинии, как мне найти, где проблема?

РЕДАКТИРОВАТЬ:

Так как проблемы с векторами, вот все операции, которые я делаю с векторамиглупая ошибка, которую я делаю здесь?

Ответы [ 2 ]

7 голосов
/ 22 ноября 2011

Типы массивов не поддерживаются как элементы в контейнерах.

Обходной путь, вероятно, заключается в использовании std::array<> вместо char[]

#include <vector>
#include <array>

typedef std::array<std::array<char,4>, 6> array;
typedef std::vector<array> _3darray; 

int main()
{
    _3darray a, b;
    a = b;
}
  • g ++ 4.6нравится
  • MSVC ++ 2010 тоже не нравится :)
0 голосов
/ 22 ноября 2011

Поскольку типы шаблонов создаются во время компиляции, невозможно, чтобы переменная времени выполнения участвовала (даже косвенно) в аргументе шаблона, даже с C ++ 0x.

Вас может заинтересовать увеличить библиотеку многомерных массивов , однако, которую можно использовать для простого объявления трехмерных массивов.Вот пример из документов:

#include "boost/multi_array.hpp"
#include <cassert>

int 
main () {
  // Create a 3D array that is 3 x 4 x 2
  typedef boost::multi_array<double, 3> array_type;
  typedef array_type::index index;
  array_type A(boost::extents[3][4][2]);

  // Assign values to the elements
  int values = 0;
  for(index i = 0; i != 3; ++i) 
    for(index j = 0; j != 4; ++j)
      for(index k = 0; k != 2; ++k)
        A[i][j][k] = values++;

  // Verify values
  int verify = 0;
  for(index i = 0; i != 3; ++i) 
    for(index j = 0; j != 4; ++j)
      for(index k = 0; k != 2; ++k)
        assert(A[i][j][k] == verify++);

  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...