这可能是一个基本问题。
我有一个数据类型'播放器'的向量,我已经使用struct定义了自己:
struct player {
string player_name;
string label;
...
...
}
然后我有一个函数将这些播放器数据类型的向量作为参数,我想访问结构中的成员,即
void foo(vector<player> players) {
cout << players.at(0).player_name;
}
at(i)
有效,因为它是向量的函数。但是,我无法访问player_name
。为什么这样,我该如何解决?如果这是基本的和无聊的,请道歉。
答案 0 :(得分:2)
以下代码访问向量中的玩家:
#include <string>
#include <vector>
using namespace std;
struct player {
string player_name;
string label;
};
int main() {
vector <player> p;
p.push_back( player() );
p.at(0).player_name = "fred";
}
答案 1 :(得分:1)
你的问题是foo()返回但你没有看到更改的player_name的副作用,我猜?
这是因为你已经通过值而不是引用将向量传递给foo()。 foo()在向量的副本上操作,而不是传递给它的原始文件,因此当函数结束时,player_name更改将丢失。
尝试将功能签名更改为void foo(vector<player>& players)
。
(请注意,我添加了一个&符号以使参数成为参考。)
答案 2 :(得分:0)
由于您发布的代码很好,因此您不应该收到编译错误。如果您遇到运行时错误,请确保在尝试访问之前已将至少一个对象插入向量中。
答案 3 :(得分:0)
只是猜测
如果出现编译错误:
可能你声明了一个类而不是一个struct。
如果遇到运行时错误:
向量为空
没有错误但没有结果:
你还没有冲洗流。添加std :: endl或调用std :: cout.flush()