gpt4 book ai didi

c++ - 我正在尝试创建一个类 vector ,然后用 for 循环命名每个类

转载 作者:行者123 更新时间:2023-11-28 00:26:10 26 4
gpt4 key购买 nike

我对此很陌生。所有帮助将不胜感激。我试图创建一个类对象的 vector ,然后用 for 循环命名每个对象。我收到错误 c2679: binary '>>' no operator found which takes a right-hand operand of type 'overloaded-function' on line 35.cin >> play.p_name。请帮忙。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Player
{
private:
string player_name;
int score[18];
public:
void p_name(string);
void Player::p_name();
};

void Player::p_name(string name)
{
player_name = name;
}

int main()
{
int num_players = 0;
int i = 0;
int j = 0;

cout << "Please enter number of players.\n";
cin >> num_players;

vector<Player>player_vector;
for (int i = 0; i < num_players ; ++i)
{
Player play;
player_vector.push_back(play);
for (int j = 0; j < num_players; j++)
{
cout << "What is the name of Player " << j << ": ";
cin >> play.p_name;
}
}
system("PAUSE");
return 0;
}

最佳答案

首先play.p_name是函数,不是变量;你不能那样分配给它。您必须使用字符串变量作为参数来调用它。你可以这样做:

string name;
cin >> name;
play.p_name(name);

第二,您存储名称的Player 对象不是 vector 中的对象!

当您执行 player_vector.push_back(play) 时,您会将 play 对象的拷贝 放入 vector 中。由于尚未为 play 分配名称,因此 vector 中的拷贝也没有名称。

稍后,您在 play 中存储了一个名称,但这不会影响存储在 vector 中的名称。在循环的底部,play 被销毁,并为下一次迭代构造一个新的(没有名称)。因此,您存储在 play 中的名称会被丢弃。

您应该将 player_vector.push_back(play) 行向下移动到设置玩家名称后,这样您就可以复制具有名称的对象一个没有。

第三,您不需要两个嵌套循环。在循环中提示输入姓名只是意味着对于每个单独的玩家(由 i 计算),您将询问每个 玩家的名称(由 计算) j).如果有 5 个玩家,将要求用户提供 25 个名字。

去掉 j 循环,只在 i 循环中询问玩家的名字,就在创建 play 对象之后。

此外,您的类定义中存在语法错误:行 void Player::p_name(); 应该只是 void p_name(); 。您仅使用 Player:: 限定符从类的外部引用函数(例如当您在几行之后定义函数时)。在类定义中,您不必告诉编译器 p_namePlayer 类中,因为编译器已经知道了。

最后,您不需要在 顶部声明的 int i = 0int j = 0 变量主要。您实际上根本没有使用这些变量,因为您在 for 中定义了 new ij 变量循环。 (当然,如上所述,您根本不需要 j。)

关于c++ - 我正在尝试创建一个类 vector ,然后用 for 循环命名每个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24923742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com