C++ 错误为xmemory-c++;缺少0x支持?
我制作了一个winform应用程序,其中使用了数组[n][n]类型的向量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 *)_
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;
}