如何解决正在操作赋值操作中朋友类的数组
我有一个名为 Map
的类,其声明如下:
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
定义为友元类。为了避免在 Robot
对象中使用显式构造函数,我将私有属性复制到 Robot
类为
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)在 Robot
类中,属性 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 },50.0 },{ 50.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++。只有直接初始化时才允许这样的声明,然后省略的大小将由初始化列表的大小定义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。