错误是缺少xmemory - c++0x支持
error is xmemory - c++0x support missing?
我做了一个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;
}
相关文章:
- 编译时未启用intel oneApi CUDA支持
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 为什么istream不支持右值提取
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 扩展光电二极管探测器以支持多个传感器
- MSVC是否支持C++11样式的属性而不是__declspec
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 哪个C++规范开始支持 std::vector
- 如何检测VS C++编译器是否支持C++11?
- arm-linux-gnueabihf-g++ 是否有可靠的 C++0x 支持?
- 在 CMake 中添加 C++0x 支持
- gem install nmatrix - 你需要一个支持 -std=c++0x 或 -std=c++11 的 g++
- 支持 c++ 0x 的最低 iOS 版本
- c++ 0x支持匿名内部类吗?
- 错误是缺少xmemory - c++0x支持
- 我可以知道哪些C++编译器(在线/免费)支持 C++0x 中的"inheriting constructors"功能
- 我可以向编译器查询有关 C++0x "alignas"支持的信息吗?