0

我可以将整数数组定义为 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,200},{300,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;
4

1 回答 1

1

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

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

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

于 2021-03-05T20:34:13.523 回答