如何解决我可以在 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 举报,一经查实,本站将立刻删除。