我在Xcode上收到以下错误:关于我的变量“in_code”和我的类“Game_Object”
使用差异类型'Game_Object'与'char'重新定义'in_code'
这是我的Person的构造函数,另一个类
Person::Person(char in_code)
{
Game_Object(in_code); -> HERE IS WHERE I AM GETTING THE ERROR!!
speed = 5;
cout << "Person constructed"<<endl;
}
但是我的Game对象的构造函数被声明为获取char变量。见:
Game_Object::Game_Object(char in_code)
{
display_code = in_code;
state = 's';
id_num = 0;
location = Cart_Point();
cout<<"Game_Object constructed."<<endl;
你能帮帮忙吗?
答案 0 :(得分:0)
假设Game_Object
是Person
的基类,你应该像这样编写构造函数:
Person::Person(char in_code):Game_Object(in_code)
{
speed = 5;
cout << "Person constructed"<<endl;
}
答案 1 :(得分:0)
我也有这个错误。我想到了。 但首先我要写一些理论以便于理解。 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;
当然,您可以指定自己的复制构造函数和复制赋值运算符,或使用“删除”#39; (在C ++ 11中提供)关键字,用于删除应对任何类实例的能力。 更多关于&#39;删除&#39;在C ++ 11中,您可以找到here。
因此,在您的情况下,编译器无法决定您实际调用的构造函数
Game_Object(in_code);
行原因有两个选项:要么调用Game_Object(char)构造函数,要么调用Game_Object(Game_Object(char))构造函数。这听起来很愚蠢,但这些结构对于编译器来说是不同的。
因此,您需要解决的问题是使用类型转换运算符
明确指定参数类型Person::Person(char in_code)
{
Game_Object(char(in_code));
speed = 5;
cout << "Person constructed"<<endl;
}
祝C ++好运,对于丑陋的格式化感到抱歉。