我很陌生。所有帮助将不胜感激。 我试图创建一个类对象的向量,然后用for循环命名每个对象。我收到错误c2679:二进制'>>'没有找到哪个操作符采用类型'重载函数'的右手操作数。在第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;
}
答案 0 :(得分:3)
首先,play.p_name
是一个函数,而不是一个变量;你不能那样分配给它。您必须使用字符串变量作为参数来调用它。你可以这样做:
string name;
cin >> name;
play.p_name(name);
第二,您存储名称的Player
对象不是向量中的对象!
执行player_vector.push_back(play)
时,您将play
对象的副本放入向量中。由于尚未为play
指定名称,因此向量中的副本也没有名称。
稍后,您将名称存储在play
中,但这不会影响存储在向量中的名称。在循环的底部,play
被破坏,并为下一次迭代构造一个新的(没有名称)。因此,您在play
中存储的名称就会被丢弃。
在设置播放器的名称之后,您应该将 第三次,您不需要两个嵌套循环。提示循环中的名称只表示对于每个单独的玩家(按 摆脱 ,您的班级定义中存在语法错误:行 最后,您不需要在player_vector.push_back(play)
行向下移动到,这样您就可以复制一个具有名称的对象,而不是那个没有名称的对象。 / p>
i
计算),您将要求每个玩家的名称(按j
计算) 。如果有5个玩家,则会要求用户输入25个名字。j
循环,在创建i
对象后立即在play
循环中询问玩家的名字。void Player::p_name();
应该只是void p_name();
。您只能使用Player::
限定符来引用类 outside 中的函数(例如,稍后将函数定义几行时)。在类定义中,您不必告诉编译器p_name
在Player
类中,因为编译器已经知道了。int i = 0
顶部声明的int j = 0
和main
变量。您根本没有实际使用这些变量,因为您在i
循环中定义了 new j
和for
变量。 (当然,如上所述,您根本不需要j
。)