Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有不同类型的变量的重新定义_C++_Redefinition - Fatal编程技术网

C++ 具有不同类型的变量的重新定义

C++ 具有不同类型的变量的重新定义,c++,redefinition,C++,Redefinition,我在Xcode上遇到以下错误:关于我的变量“in_code”和我的类“Game_Object” 用不同类型的“游戏对象”与“字符”重新定义“游戏代码” 这是我的Person构造函数,另一个类 Person::Person(char in_code) { Game_Object(in_code); -> HERE IS WHERE I AM GETTING THE ERROR!! speed = 5; cout << "Person constructed"<&

我在Xcode上遇到以下错误:关于我的变量“in_code”和我的类“Game_Object”

用不同类型的“游戏对象”与“字符”重新定义“游戏代码”

这是我的Person构造函数,另一个类

Person::Person(char in_code)
{
Game_Object(in_code);     -> HERE IS WHERE I AM GETTING THE ERROR!!

speed = 5;

cout << "Person constructed"<<endl;

}
Person::Person(字符在代码中)
{
Game_Object(在代码中);->这里是我得到错误的地方!!
速度=5;

cout假设
Game\u Object
Person
的基类,您应该这样编写构造函数:

Person::Person(char in_code):Game_Object(in_code)
{

speed = 5;

cout << "Person constructed"<<endl;

}
Person::Person(char in_code):游戏对象(in_code)
{
速度=5;

我也有这个错误,我发现了。 但首先我得写一些理论,以便更容易理解。 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;
行原因有两种选择:要么调用Game_对象(char)构造函数,要么调用Game_对象(Game_对象(char))构造函数。这听起来很傻,但这些构造对于编译器来说是不同的

所以,您需要解决的所有问题就是使用typecast操作符显式指定参数的类型

Person::Person(char in_code)
{
Game_Object(char(in_code));    

speed = 5;

cout << "Person constructed"<<endl;

}
Person::Person(字符在代码中)
{
游戏对象(字符(在代码中));
速度=5;

cout
Game_Object obj(in_code);
我们先假设
Game_Object
Person
的基类,你不小心把它放在
Person
构造函数的主体中,而不是它所属的初始化列表中?不相关:
location=Cart_Point()如果成员在类def中声明为
Cart\u Point location;
,则
无效。它已使用该默认值构造。事实上,我看不出该构造函数中的所有其他赋值都不在
Game\u对象的初始化列表中的原因,只有
cout+1,如果它不是基类,则
游戏对象(在代码中)
行本身是无用的,应该删除。
Game_Object(in_code); 
Person::Person(char in_code)
{
Game_Object(char(in_code));    

speed = 5;

cout << "Person constructed"<<endl;

}