У меня была эта ошибка тоже. Я понял. Но, во-первых, я должен написать некоторую теорию для более легкого понимания. В C++ есть две функции, которые неявно создают дополнительный код во время компиляции:
1) Конструктор копирования и оператор присваивания копии создаются компилятором, если вы не указали их для своего класса. В части реализации он рекурсивно копирует каждый член.
2) если у вас есть конструктор с одним параметром любого типа, то компилятор также создает оператор присваивания с тем же параметром. В части реализации он создает новый экземпляр вашего типа и присваивает ему свою переменную.
Это проиллюстрировано в примере кода ниже:
class GameObject{
public:
GameObject(int iD):innerData(iD){
//..
}
int innerData;
};
// Create a new object using constuctor specified by me..
GameObject gameObject(5);
std::cout<<"gameObject = "<<gameObject.innerData<<std::endl;
// Create the second object with different data..
GameObject gameObject2(6);
std::cout<<"gameObject2 = "<<gameObject2.innerData<<std::endl;
// Next line compiles well cause compiler created
// GameObject& operator=(const GameObject&) for us.
gameObject2=gameObject;
std::cout<<"gameObject2 = "<<gameObject2.innerData<<std::endl;
// Next line also compiles well cause compiler created
// GameObject& operator=(int iD) using GameObject(int iD)
// as a reference.
gameObject2=3;
std::cout<<"gameObject2 = "<<gameObject2.innerData<<std::endl;
Конечно вы можете указать свои собственные конструкторы копий и операторы присваивания или использовать «удалить» (представленный в C++ 11) ключевое слово, чтобы удалите возможность справиться с любым экземпляром вашего класса. Подробнее о 'delete' в C++ 11 вы найдете here.
Так что в вашем случае компилятор не может решить, что конструктор вы на самом деле назвать в
Game_Object(in_code);
линии причины есть два варианта: либо вы называете Game_Object (символов) конструктор или вызове Game_Object (Game_Object (Char)) конструктор , Это может показаться глупым, но эти конструкции для компилятора отличаются.
Так все, что вам нужно решить ваш вопрос явно указать тип вашего параметра с оператором приведения типа
Person::Person(char in_code)
{
Game_Object(char(in_code));
speed = 5;
cout << "Person constructed"<<endl;
}
Удачи с C++ и извините за уродливое форматирование.
'Game_Object obj (in_code);' – gongzhitaao
. Будем ли мы начинать с предположения, что 'Game_Object' является базовым классом' Person', и вы случайно положили его в тело конструктора 'Person', а не в список инициализации. ? Несвязанный: 'location = Cart_Point();' бесполезно, если член объявлен 'Cart_Point location'' в классе def. Он уже построен с таким дефолтом. На самом деле, я не вижу причины * всех * других назначений в этом конструкторе, которые не находятся в списке инициализации 'Game_Object', причем только' cout << ...' находится в фактическом теле. – WhozCraig