我可以在 C++ 中使用数组作为 struct 的属性吗?

Posted

技术标签:

【中文标题】我可以在 C++ 中使用数组作为 struct 的属性吗?【英文标题】:Can I use an array as an attribute of struct in C++? 【发布时间】:2021-06-04 10:47:27 【问题描述】:

我可以在 C++ 中将整数数组定义为结构中的属性吗?

我就是这样尝试的,输出也贴出来了:

struct SpaceTime
    SpaceTime(int Coordinates[2][2]):
       Coordinates_(Coordinates[2][2])
public:
    int Coordinates_;
;     

int main()
    SpaceTime earth(100,200,300,400);
    std::cout << earth.Coordinates_[1][1] << std::endl;

来自 C++14、Windows 10 Visual Studio 的输出:

.\***.cpp: In function 'int main()':
.\***.cpp:28:39: error: no matching function for call to 'SpaceTime::SpaceTime(<brace-enclosed initializer list>)'
  SpaceTime earth(100,200,300,400);
                                       ^
.\***.cpp:22:5: note: candidate: SpaceTime::SpaceTime(int (*)[2])
     SpaceTime(int Coordinates[2][2]):
     ^~~~~~~~~
.\***.cpp:22:5: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'int (*)[2]'
.\***.cpp:21:8: note: candidate: constexpr SpaceTime::SpaceTime(const SpaceTime&)    
 struct SpaceTime
        ^~~~~~~~~
.\***.cpp:21:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const SpaceTime&'
.\***.cpp:21:8: note: candidate: constexpr SpaceTime::SpaceTime(SpaceTime&&)
.\***.cpp:21:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'SpaceTime&&'
.\***.cpp:29:35: error: invalid types 'int[int]' for array subscript
  std::cout << earth.Coordinates_[1][1] << std::endl;

【问题讨论】:

"...does not work..." 无法清楚地描述您遇到的问题。请发布 - 什么不起作用以及为什么。 为什么要有构造函数,因为内置的初始化会起作用? struct STint c[2][2];; int main() auto earth = ST100, 200, 300, 400; ... 或更简单的:ST earth 100, 200, 300, 400 ; 我不清楚你问的是哪个方面。 “结构中的属性”表示结构的成员,如SpaceTime::Coordinates_? (但您没有尝试将 Coordinates_ 定义为数组,只是用数组对其进行初始化。)还有一个问题是您看到的整数数组是什么——来自例如 javascript 的人可能会看到 @ 987654327@ 作为一个数组,当它是一个初始化列表时。您能否添加更多文字来描述您对情况的理解以及促使您以这种方式编写代码的原因? 如果你想要一个灵活的数组——c++ 不支持它。 C 确实。但是你写的这些东西无论如何都行不通。 【参考方案1】:

是的,C++ 数据成员可以是一个数组。但是,您的示例不是。您的示例 Coordinates_ 只是一个标量整数。如果你希望它是一个数组,你的类定义应该是这样的:

class SpaceTime 
public:
    int Coordinates_[2][2];
; 

此外,如果您希望此数据成员由构造函数初始化,则该构造将需要执行数据的深层复制。

【讨论】:

以上是关于我可以在 C++ 中使用数组作为 struct 的属性吗?的主要内容,如果未能解决你的问题,请参考以下文章

C++怎样将一个数插入到数组末尾?

手把手写C++服务器(10):结构体struct常用技术之柔性数组字节对齐__attribute__

是否可以使用 ref-struct 和 ref-array 创建结构数组?

C++基础学习(09)——结构

C++基础学习(09)——结构

包含char数组作为成员的Struct数组 - C [关闭]