ни один экземпляр перегруженной функции не соответствует списку аргументов C ++ - PullRequest
1 голос
/ 18 октября 2011

У меня просто очень простой класс, который дает функции, которые возвращают команду-победителя матча.

здесь team.cpp

class teams
{
string teamName;
string teamName2;
int score;
int score2;

public:
teams ();
void set_team1();
void set_team2();
string get_score()
{
    if (score > score2)
    {
        return teamName;
    }
    else
    {
        return teamName2;
    }
}

private:
void teams::set_team1(string teamName, int score)
{
    this->teamName=teamName;
    this->score=score;
}
void teams::set_team2(string teamName2, int score2)
{
    this->teamName2=teamName2;
    this->score2=score2;
}
};    

и вот строка, где яполучаю ошибку в основном методе.Я пытаюсь создать объект команды.

    firstTeam.set_team1(teamName, score);
    firstTeam.set_team2(teamName2, score2);

Visual Studio подходит и говорит: «ошибка: ни один экземпляр перегруженной функции» team :: set_team1 «не соответствует списку аргументов».* Что мне не хватает?

Это точная ошибка, которую я получаю:

1>c:\users\lab8.cpp(31): error C2664: 'void teams::set_team1(std::string,int)' : cannot     convert parameter 1 from 'std::vector<_Ty>' to 'std::string'
1>          with
1>          [
1>              _Ty=std::string
1>          ]
1>          No user-defined-conversion operator available that can perform this     conversion, or the operator cannot be called
1>c:\users\lab8.cpp(32): error C2664: 'void teams::set_team2(std::string,int)' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'std::string'
1>          with
1>          [
1>              _Ty=std::string
1>          ]
1>          No user-defined-conversion operator available that can perform this     conversion, or the operator cannot be called
1>  Generating Code...
1>
1>Build FAILED.

1 Ответ

1 голос
/ 18 октября 2011

ошибка C2664: «void commands :: set_team1 (std :: string, int)»: невозможно преобразовать параметр 1 из «std :: vector <_Ty>» в «std :: string»

Из сообщения об ошибке ясно, что первый параметр не относится к типу std::string. Это на самом деле std::vector. Таким образом,

 firstTeam.set_team1(teamName, score);  // Check what is the type of teamName

Если вы видите, что teamName на самом деле std::string, проверьте, правильно ли вы компилируете файл. Сохраните файл и попробуйте снова, потому что код, который вы разместили, и сообщение об ошибке не имеют отношения.


Компилятор не предоставляет конструктор по умолчанию (конструктор без аргументов) в случае, если ваш класс перегружает конструктор.

class teams
{
    string teamName;
    string teamName2;
    int score;
    int score2;

    // ...

    public:
       teams( string t, int s ) : teamName(x), score(s)
                               // Initializer list
       {}
};

Но я не понимаю, почему у вас есть teamName2, score2 члены в качестве членов команд. Что делать, если есть 10 команд? Просто создайте экземпляр для каждой команды и сравните их с другими экземплярами команд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...