[英]Cannot define a 3D vector in a struct
当我以这种方式定义我的向量时
#include<iostream>
#include<vector>
using namespace std;
typedef std::vector<char> Image1D;
typedef std::vector<Image1D> Image2D;
typedef std::vector<Image2D> Image3D;
int main()
{
Image3D image2(10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0)));
return 0;
}
一切正常,但是当我在结构中定义相同的向量时,如果在类型说明符方面给我一些错误,则此 const 值 10 有问题
#include<iostream>
#include<vector>
using namespace std;
typedef std::vector<char> Image1D;
typedef std::vector<Image1D> Image2D;
typedef std::vector<Image2D> Image3D;
struct CameraImages
{
Image3D image2(10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0)));
};
任何帮助将不胜感激
结构数据成员的初始化无效。
struct CameraImages
{
Image3D image2(10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0)));
};
您必须使用大括号或等号初始化程序。
来自 C++ 17 个标准(12.2 个 Class 成员)
member-declarator:
declarator virt-specifier-seqopt pure-specifieropt
declarator requires-clause
declarator brace-or-equal-initializeropt
identifieropt attribute-specifier-seqopt : constant-expression brace-or-equal-initializeropt
例如
struct CameraImages
{
Image3D image2 {10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0))};
};
或者
struct CameraImages
{
Image3D image2 = {10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0))};
};
或者
struct CameraImages
{
Image3D image2 = Image3D(10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0)));
};
image2 是成员,您可以设置默认初始化,例如:
struct CameraImages
{
Image3D image2 = Image3D(10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0)));
};
你也可以使用大括号初始化
struct CameraImages
{
Image3D image2 = {(10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0)))};
};
但前者可能更清楚。
顺便说一句:这种方法将对图像操作产生一些重要的性能影响。
struct CameraImages
{
Image3D image2(10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0)));
};
这是一个 function 声明。
为了防止语法歧义,例如Most vexing parse ,不允许任何成员声明,例如T t(args...)
。
简而言之,为了解决您的问题,您必须将其声明为这些 forms。
Image3D image2{10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0))};
Image3D image2 = Image3D(10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0)));
有关更多信息,您可以查看为什么类内初始化程序只能使用 = 或 {}?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.