Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误为xmemory-c++;缺少0x支持?_C++_Visual Studio 2010_Vector_C++11 - Fatal编程技术网

C++ 错误为xmemory-c++;缺少0x支持?

C++ 错误为xmemory-c++;缺少0x支持?,c++,visual-studio-2010,vector,c++11,C++,Visual Studio 2010,Vector,C++11,我制作了一个winform应用程序,其中使用了数组[n][n]类型的向量 typedef char myarray[9][9]; typedef vector<myarray> array3d; 在xmemory中指向此代码 void construct(pointer _Ptr, _Ty&& _Val) { // construct object at _Ptr with value _Val ::new ((void _FARQ *)_

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

typedef char myarray[9][9];  
typedef vector<myarray> array3d; 
在xmemory中指向此代码

void construct(pointer _Ptr, _Ty&& _Val)
    {   // construct object at _Ptr with value _Val
    ::new ((void _FARQ *)_Ptr) _Ty(_STD forward<_Ty>(_Val));
    }
void构造(指针Ptr,Ty&&Val)
{//在_Ptr处用值_Val构造对象
::新的((无效的*)(无效的);(标准前进((无效的));
}
在超过2.5k行的代码中,如何找到问题所在

编辑:

因为向量的问题,这里是我对向量所做的所有操作

#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;
typedef char myarray[9][9];
typedef字符串数组[9][9];
void函数2(向量*my_3d_字符串_数组,int d)
{
字符串::迭代器;
int j,cl;
它=查找(*my_3d_string_array)[d][j][cl].begin(),(*my_3d_string_array)[d][j][cl].end(),3);
(*my_3d_string_array)[d][2][3]。擦除(它);
}
空函数(向量*my_3d_字符串_数组,int d)
{
(*我的3d字符串数组)[d][3][4]=2;
函数2(我的3d字符串数组,d);
}
int main()
{
myarray矩阵;
字符串\数组字符串\矩阵;
std::向量my_3d_数组;
std::vector my_3d_string_数组;
//填充矩阵(矩阵);
//填充字符串矩阵(字符串矩阵)
int d;
函数(&my_3d_string_array,d);//将指向向量的指针传递给函数d是第三维
my_3d_阵列。向后推_(矩阵);
我的3d字符串数组。向后推(字符串矩阵);
}

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

因为模板类型是在编译时实例化的,所以即使使用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;
}
#包括“boost/multi_array.hpp”
#包括
int
主要(){
//创建一个3 x 4 x 2的三维阵列
typedef boost::multi_array_type;
typedef数组_type::index索引;
数组_类型A(boost::extensts[3][4][2]);
//为元素指定值
int值=0;
对于(索引i=0;i!=3;++i)
对于(索引j=0;j!=4;++j)
对于(索引k=0;k!=2;++k)
A[i][j][k]=值++;
//验证值
int=0;
对于(索引i=0;i!=3;++i)
对于(索引j=0;j!=4;++j)
对于(索引k=0;k!=2;++k)
断言(A[i][j][k]==verify++);
返回0;
}

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

解决方法可能是使用
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;
}
#包括
#包括
typedef std::数组;
typedef std::vector3du数组;
int main()
{
_3da,b;
a=b;
}
  • g++4.6喜欢它
  • MSVC++2010也不喜欢:)

那么错误在哪里,那一行是什么?另外,向量是否真的命名为
3darray
?否-这些都不是真正的代码。我只是给出了一个示例代码。我想创建一个矩阵向量(动态数组)(数组[9][9])。@JoachimPileborg:我在这里发布了我的错误列表:(也许我复制了一个稍有不同的错误)很抱歉,n的值是固定的…它的9不是某个变量..我试图使它通用。。但我想我沟通错了。你是把它声明为
#define
,还是
const int
,还是你真的写了
typedef char array[9][9]
?现在,我在想,为什么有人要验证数组元素的赋值?让我想起了按LOC代码付费:)最坏的情况是OP总是可以使用向量的向量。或者提升多维数组:)我只希望第三维是动态的,因为数组会产生更奇怪的错误。。如何使用给定的ide?我使用VS2010编译了它(使用所示的代码片段)。您的代码中可能还有另一个问题
#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;
}