C++ 访问向量<;对象>;来自另一个类';方法
我有一节玩家课和一节游戏课 My Game.cpp有一个C++ 访问向量<;对象>;来自另一个类';方法,c++,oop,C++,Oop,我有一节玩家课和一节游戏课 My Game.cpp有一个setPlayers方法。它编译时没有错误,但当我在main中使用它时,它不起作用,反而给了我分段错误。甚至可以从另一个对象的方法访问另一个对象的向量吗? main.cpp Player.cpp int Player::getRole() { return this->role; } void Player::setRole(int newRole) { std::cout << "setting role
setPlayers
方法。它编译时没有错误,但当我在main中使用它时,它不起作用,反而给了我分段错误。甚至可以从另一个对象的方法访问另一个对象的向量吗?
main.cpp
Player.cpp
int Player::getRole() {
return this->role;
}
void Player::setRole(int newRole) {
std::cout << "setting role" << std::endl;
this->role = role;
}
您发布的代码中有两个问题 首先,向量以零大小开始,除非构造一个非零大小的向量。创建一个没有元素的向量,然后单击此处
void Game::setPlayers(Player* player_arg, int p_position){
players[p_position] = player_arg;
}
您可以使用操作符[]
访问元素。注意到什么了吗?不能访问空向量中的元素。使用push_back
在后面添加一个元素。实际上,如果你想让玩家在某些位置,那么一个std::unordered_map
会更容易,它们可以用作“稀疏”数组,即你可以在p_position=12
添加一个Player
,即使这是你添加的第一个玩家
第二,
one.setPlayers(&p, p.getRole()-1);
指针
&p
始终具有相同的值。它是本地对象Player p的地址代码>。当您离开作用域时,该对象将被销毁,并且向量中的所有指针都将成为悬空指针。在实际需要对象容器时,将指针存储在容器中是一个常见的错误。改用std::vector
。记住,vector一开始是空的。空向量中的任何索引都将超出范围,并导致未定义的行为。请提供一个。将&p
传递给setPlayers
看起来是错误的,但我不认为这是当前问题的原因不要将头文件与类混淆,带有对象的类或带有编译时错误的运行时错误。@idclev463035818您能看到更新的qs吗?@Beta您能看到更新的qs吗?我正在尝试使用std::unordered\u map playersMap代码>但它一直给我一个播放器上的标识符
#ifndef GAME_H
#define GAME_H
#include <vector>
#include <map>
#include <string>
#include <stddef.h>
#include <time.h>
#include <stdlib.h>
#include "shipment.h"
#include "order.h"
#include "player.h"
class Game
{
private:
int gId;
std::vector<Player*> players;
public:
std::vector<Player*> getPlayers();
void setPlayers(Player*, int);
};
#endif
void Game::setPlayers(Player* player_arg, int p_position){
players[p_position] = player_arg;
}
void Game::setPlayers(Player* player_arg, int p_position){
players[p_position] = player_arg;
}
one.setPlayers(&p, p.getRole()-1);