错误是缺少xmemory - c++0x支持

error is xmemory - c++0x support missing?

本文关键字:c++0x 支持 xmemory 错误      更新时间:2023-10-16

我做了一个winform应用程序,我使用数组[n][n]类型的向量使用

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

据我所知,这个特性在c++0x中提供。我正在使用visual studio 2010最终是错误的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行的代码中,我如何找到问题所在?

编辑:

由于问题似乎与向量有关这里是我对向量所做的所有操作

#include <vector>
#include <string>
#include <algorithm>
using namespace std;
typedef char myarray[9][9];
typedef string string_array[9][9];
void function2(vector<string_array>*my_3d_string_array, int d)
{
    string::iterator it;
    int j,cl;
    it=find((*my_3d_string_array)[d][j][cl].begin(),(*my_3d_string_array)[d][j][cl].end(),3);
    (*my_3d_string_array)[d][2][3].erase(it);
}
void function(vector<string_array>*my_3d_string_array, int d)
{
    (*my_3d_string_array)[d][3][4] = 2;
    function2(my_3d_string_array,d);
}
int main()
{
    myarray matrix;
    string_array string_matrix;
    std::vector<myarray>      my_3d_array;
    std::vector<string_array> my_3d_string_array;
    // fill_matrix(matrix);
    // fill_string_matrix(string_matrix)
    int d;
    function(&my_3d_string_array, d); // passing pointer to vector to a function d is the 3rd dimention
    my_3d_array.push_back(matrix);
    my_3d_string_array.push_back(string_matrix);
}

我在这里犯了一个愚蠢的错误吗?

不支持数组类型作为容器中的元素。

解决方法可能是使用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也不喜欢它:)

因为模板类型是在编译时实例化的,所以即使使用c++ 0x,也不可能让运行时变量参与(甚至间接地)模板实参。

您可能对boost多维数组库感兴趣,但是,它可以很容易地用于声明3d数组。下面是文档中的一个示例:

#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;
}