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