0

这大概是一个基本的问题。

我有一个数据类型“播放器”的向量,我使用结构定义了自己:

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

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

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

之所以at(i)有效,是因为它是矢量的函数。但是,我无法访问player_name. 为什么会这样,我该如何解决?抱歉,如果这是基本且无聊的。

4

4 回答 4

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";
}
于 2011-06-08T14:41:20.293 回答
1

您的问题是 foo() 返回但您没有看到更改后的 player_name 的副作用,我猜?

这是因为您通过值而不是引用将向量传递给 foo()。foo() 正在对向量的副本进行操作,而不是您传递给它的任何原始内容,因此当函数结束时, player_name 更改会丢失。

尝试将函数签名更改为void foo(vector<player>& players).

(请注意,我添加了一个 & 来使参数成为参考。)

于 2011-06-08T15:00:13.123 回答
0

您应该不会收到编译错误,因为您发布的代码很好。如果您遇到运行时错误,请确保在尝试访问之前已将至少一个对象插入到向量中。

于 2011-06-08T14:41:56.023 回答
0

只是猜测

如果你得到一个编译错误:

可能您声明了一个类而不是结构。

如果您收到运行时错误:

向量为空

没有错误但没有结果:

你还没有刷新流。添加 std::endl 或调用 std::cout.flush()

于 2011-06-08T14:45:08.930 回答