繁体   English   中英

无法在结构中定义 3D 向量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM