【发布时间】:2025-12-07 13:40:01
【问题描述】:
我试图在 player 类中创建一个名为 player 的对象。
#include <string>
#ifndef PLAYER_HH
#define PLAYER_HH
using namespace std;
class Player
{
public:
Player(string name, int points);
const string get_name();
int get_points();
void add_points(int pts);
bool has_won();
private:
string _name;
};
#endif // PLAYER_HH
来自 player.cpp:
#include <string>
using namespace std;
Player::Player(string name):
_name(name), _points(0){
}
现在,问题是,在主函数中我得到了这个错误:
error: no matching function for call to ‘Player::Player(const char [6])’
Player player1 = Player("Matti");
^
编译器不应该能把它转成字符串吗?
编辑:这是我不应该更改的完整 main.cpp:
#include <cstdlib>
#include <iostream>
#include <string>
#include "player.hh"
int main()
{
Player player1 = Player("Matti");
Player player2 = Player("Teppo");
Player* in_turn = 0;
int turn = 1;
while (true)
{
if (turn % 2 != 0)
{
in_turn = &player1;
}
else
{
in_turn = &player2;
}
std::cout << "Enter the score of player " << in_turn->get_name()
<< " of turn " << turn << ": ";
int pts = 0;
std::cin >> pts;
in_turn->add_points(pts);
if (in_turn->has_won())
{
std::cout << "Game over! The winner is " << in_turn->get_name() << "!" << std::endl;
return EXIT_SUCCESS;
}
std::cout << std::endl;
std::cout << "Scoreboard after turn " << turn << ":" << std::endl;
std::cout << player1.get_name() << ": " << player1.get_points() << "p" << std::endl;
std::cout << player2.get_name() << ": " << player2.get_points() << "p" << std::endl;
std::cout << std::endl;
turn += 1;
}
return EXIT_SUCCESS;
}
你们的快速回答太棒了:-)
【问题讨论】:
-
"编译器不应该可以将其转换为字符串吗?" 是的,它可以很好地将其转换为
std::string。但这不是问题所在:没有声明的构造函数仅接受std::string,还有一个额外的int参数您忘记传递给构造函数。 -
你的声明有
Player(string,int),但定义是Player(string) -
这是一个作业,我不应该更改 main.cpp。两名球员都有特定数量的积分。有没有办法在不首先声明他们的情况下将 int 点分配给两个玩家?
-
看我的回答,为 score 参数使用默认值。
-
如果你不应该更改 main.cpp,你也不应该更改构造函数的原型或删除
_points成员,并且两个玩家都从零开始。
标签: c++ method-parameters