私もこのエラーがありました。私はそれを考え出した。しかし、最初に、理解を容易にするためにいくつかの理論を書かなければなりません。C++ には、コンパイル時に追加のコードを暗黙的に作成する 2 つの機能があります。
1) コピー コンストラクターとコピー代入演算子は、クラスに指定しない場合、コンパイラによって作成されます。実装部分では、すべてのメンバーを再帰的にコピーします。
2) 任意の型の 1 つのパラメーターを持つコンストラクターがある場合、コンパイラーは同じパラメーターを持つ代入演算子も作成します。実装部分では、タイプの新しいインスタンスを作成し、変数に割り当てます。
以下のコード例で説明します。
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;
もちろん、独自のコピー コンストラクターとコピー代入演算子を指定したり、'delete' (C++11 で提示) キーワードを使用して、クラスのインスタンスをコピーする機能を削除したりできます。C++11 の「削除」の詳細については、こちらを参照してください。
したがって、あなたの場合、コンパイラーは実際に呼び出すコンストラクターを決定できません
Game_Object(in_code);
行には、Game_Object(char) コンストラクターを呼び出すか、Game_Object(Game_Object(char)) コンストラクターを呼び出すかの 2 つのオプションがあります。これはばかげているように聞こえるかもしれませんが、これらの構造はコンパイラーによって異なります。
したがって、問題を解決するために必要なのは、型キャスト演算子を使用してパラメーターの型を明示的に指定することだけです
Person::Person(char in_code)
{
Game_Object(char(in_code));
speed = 5;
cout << "Person constructed"<<endl;
}
C++ で頑張ってください。醜い書式設定で申し訳ありません。