微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我可以将整数数组定义为 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输出

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。