来自朋友 class 在赋值操作中的数组正在被操作

array from friend class in assignment operation is being manipulated

我有一个名为 Map 的 class,声明如下:

class Map {
public:
    void get_world_size(const double val);
    void get_landmarks(const double array[][2], int val);
    void print_map();

private:
    int num_landmarks;
    double world_size;
    double landmarks[][2];

    friend class Robot;
};

我已经将 Robot 定义为好友 class。为了避免在 Robot 对象中有显式构造函数,我将私有属性复制到 Robot class as

void Robot::get_world_size(const Map map){
    this->world_size = map.world_size;
}

void Robot::get_landmarks(const Map map){
    this->num_landmarks = map.num_landmarks;
    for(int i = 0; i < this->num_landmarks; i++){
        if (i == 0) {
            std::cout << "The map landmarks are being copied to robot landmarks..." << std::endl;
        }
        this->landmarks[i][0] = map.landmarks[i][0];
        this->landmarks[i][1] = map.landmarks[i][1];
        std::cout << " Landmark " << i << " = " << map.landmarks[i][0] << "\t" << map.landmarks[i][1] << " is copied!" << std::endl;
    }
}

至少有两个问题我不能完全理解:(1)在Robotclass中,属性double landmarks[][2]抛出:

In copy constructor ‘constexpr Robot::Robot(const Robot&)’:
.../Robot.h:41:12: error: initializer for flexible array member ‘double Robot::landmarks [][2]’
   41 |     double landmarks[][2];

而且即使我很天真地定义为double landmarks[8][2]来摆脱这个错误,赋值的内容也是错误的,即for

Map map;
    // Map size in meters
    int map_size = 100;
    map.get_world_size(map_size);
    int num_landmarks = 8;
    double landmarks[8][2] = { { 20.0, 20.0 }, { 20.0, 80.0 }, { 20.0, 50.0 },
                               { 50.0, 20.0 }, { 50.0, 80.0 }, { 80.0, 80.0 },
                               { 80.0, 20.0 }, { 80.0, 50.0 } };

    map.get_landmarks(landmarks, num_landmarks);
    map.print_map();

    //Practice Interfacing with Robot Class
    Robot myrobot;
    myrobot.get_world_size(map);
    myrobot.get_landmarks(map);
    myrobot.print_robot();

我在 print_robot 方法中得到非常奇怪的结果:

20  20
20  80
20  50
50  20
50  80
80  80
80  20
80  50
Robot indicates the world size as: 100
The map landmarks are being copied to robot landmarks...
 Landmark 0 = 0 1.6976e-313 is copied!
 Landmark 1 = 6.91261e-310  100 is copied!
 Landmark 2 = 20    20 is copied!
 Landmark 3 = 20    80 is copied!
 Landmark 4 = 20    50 is copied!
 Landmark 5 = 50    20 is copied!
 Landmark 6 = 50    80 is copied!
 Landmark 7 = 80    80 is copied!

你能帮帮我吗?

编辑:问题如回复中提到的错误初始化。

double landmarks[][2]; 不是合法的 C++。仅当您直接初始化它时才允许这样的声明,然后省略的大小将由初始化列表的大小定义。