初学者的问题:为什么我不能在向量中访问对象的成员?

时间:2011-06-08 14:37:34

标签: c++ stdvector

这可能是一个基本问题。

我有一个数据类型'播放器'的向量,我已经使用struct定义了自己:

struct player {
     string player_name;
     string label;   
     ...
     ...
}

然后我有一个函数将这些播放器数据类型的向量作为参数,我想访问结构中的成员,即

void foo(vector<player> players) {
    cout << players.at(0).player_name;
}

at(i)有效,因为它是向量的函数。但是,我无法访问player_name。为什么这样,我该如何解决?如果这是基本的和无聊的,请道歉。

4 个答案:

答案 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()