簡體   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