Здесь есть три проблемы. Во-первых, ваш конструктор объявлен как Pokemons();
, принимая нулевые аргументы, но у вас есть конструктор , определенный как принимающий много аргументов, и поэтому их сигнатуры не совпадают, и в конечном итоге, из-за перегрузки функций в C ++ они ссылаются на разные функции. Попробуйте объявить конструктор в заголовочном файле следующим образом:
class Pokemons {
public:
Pokemons(string nm, string tp1, string tp2, int hp, int atk,
int def, int satk, int sdef, int spd);
};
Теперь и определение, и объявление должны ссылаться на одну и ту же функцию.
Вторая проблема здесь:
Pokemons p001;
Это неявно вызывает конструктор без аргументов. Важно понимать, что многие функции вызываются в C ++, даже если они не были названы явно. Чтобы это исправить, вы должны инициализировать p001
следующим образом:
Pokemons p001("Bulbasaur", "Grass", "None", 31,23,45,43,45,12);
Вам также следует удалить p001.Pokemons("Bulbasaur", "Grass", "None", 31,23,45,43,45,12);
в следующей строке. Теперь компилятор может сопоставить этот вызов вашему конструктору, принимая множество аргументов.
Третья проблема на данный момент состоит в том, что pokemonName
на всем протяжении pokemonSpeed
определены вне класса Pokemons
в глобальной области видимости. Это похоже на создание члена static
в Java. Они должны быть помещены в определение вашего класса, чтобы сделать их членами экземпляра:
class Pokemons {
public:
Pokemons(string nm, string tp1, string tp2, int hp, int atk,
int def, int satk, int sdef, int spd);
private:
string pokemonName;
string pokemonType1;
string pokemonType2;
int pokemonHP;
int pokemonAttack;
int pokemonDefence;
int pokemonSPAttack;
int pokemonSPDefence;
int pokemonSpeed;
};