Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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++中编码,在一个类的头文件中有私有数据成员。_C++_Pointers_Header_Ampersand - Fatal编程技术网

C++头文件中的对象初始化问题 我在C++中编码,在一个类的头文件中有私有数据成员。

C++头文件中的对象初始化问题 我在C++中编码,在一个类的头文件中有私有数据成员。,c++,pointers,header,ampersand,C++,Pointers,Header,Ampersand,private: Object1 obj1; Object2 obj2(&obj1); 因此,第二个对象获取指向第一个对象的指针。当我试图编译该程序时,出现以下错误: “&”标记前应为标识符 是否有方法在实现文件中而不是在其定义中实例化此类构造函数中的对象?如何更正此错误?程序无法编译。您不能这样编写: Object2 obj2(&obj1); class Sample { private: Object1 obj1; Obj

private:
      Object1 obj1;
      Object2 obj2(&obj1);
因此,第二个对象获取指向第一个对象的指针。当我试图编译该程序时,出现以下错误:

“&”标记前应为标识符


是否有方法在实现文件中而不是在其定义中实例化此类构造函数中的对象?如何更正此错误?程序无法编译。

您不能这样编写:

 Object2 obj2(&obj1);
class Sample
{
private:
      Object1 obj1;
      Object2 obj2;
public:
     Sample(Object1 o1)  : obj1(o1), obj2(&o1)
     { 
     }
};
使用构造函数初始化对象,如下所示:

 Object2 obj2(&obj1);
class Sample
{
private:
      Object1 obj1;
      Object2 obj2;
public:
     Sample(Object1 o1)  : obj1(o1), obj2(&o1)
     { 
     }
};
请阅读以下内容以详细了解这一点:


你不能这样写:

 Object2 obj2(&obj1);
class Sample
{
private:
      Object1 obj1;
      Object2 obj2;
public:
     Sample(Object1 o1)  : obj1(o1), obj2(&o1)
     { 
     }
};
使用构造函数初始化对象,如下所示:

 Object2 obj2(&obj1);
class Sample
{
private:
      Object1 obj1;
      Object2 obj2;
public:
     Sample(Object1 o1)  : obj1(o1), obj2(&o1)
     { 
     }
};
请阅读以下内容以详细了解这一点:


编译器在这个错误中告诉您的是,您试图创建一个名为obj2的方法,返回一个以引用为参数的Object2。但它无法确定引用的类型

另一方面,如果要在构建对象之前设置引用,可以编写如下内容:

Object2* obj2 = &obj1;
编辑

如何更正此错误?程序无法编译


让你的程序编译并不总是最好的解决方案,也许它不会编译是有原因的,你必须理解它为什么会这样。简单地纠正错误可能无助于你的事业。正如Nawaz在评论中指出的那样,如果Object1和Object2的类型不同,则可能是您尝试执行的操作不正确。

编译器在这个错误中告诉您的是,您尝试创建一个名为obj2的方法,返回一个以引用为参数的Object2。但它无法确定引用的类型

另一方面,如果要在构建对象之前设置引用,可以编写如下内容:

Object2* obj2 = &obj1;
编辑

如何更正此错误?程序无法编译


让你的程序编译并不总是最好的解决方案,也许它不会编译是有原因的,你必须理解它为什么会这样。简单地纠正错误可能无助于你的事业。正如纳瓦兹在评论中指出的,如果类型Objt1和Objt2是不同的,那么你可能要做的事情不是正确的事情。C++中的

< P>,你不能将成员初始化为类定义的一部分。此类操作应在构造函数中完成:

myClass() : obj2( & (this->obj1) ) { ... }

这通常会产生警告,但只要Obj2在构造MyCclass完成之前不使用构造函数参数,那么就可以了。在C++中,

< P>,不能将成员初始化为类定义的一部分。此类操作应在构造函数中完成:

myClass() : obj2( & (this->obj1) ) { ... }

这通常会生成一个警告,但只要在myClass的构造完成之前obj2不使用其构造函数参数就可以了。

您不能像在声明中那样为成员赋值。您必须在类的构造函数中执行此操作

MyClass
{
    private:
        Object1 obj1;
        Object2 obj2;

    public:
        MyClass()
        {
            obj2 = Object2(&obj1);
        }
};

不能像在成员声明中那样为成员赋值。您必须在类的构造函数中执行此操作

MyClass
{
    private:
        Object1 obj1;
        Object2 obj2;

    public:
        MyClass()
        {
            obj2 = Object2(&obj1);
        }
};

谢谢这解决了问题。欢迎您,如果这解决了您的问题,请标记为已回答。。。。如果Object2的类型与Object1完全不同呢?@Nawaz,这是可能的。如果是这种情况,您将在运行时得到一个非常好的惊喜谢谢。这解决了问题。欢迎您,如果这解决了您的问题,请标记为已回答。。。。如果Object2的类型与Object1完全不同呢?@Nawaz,这是可能的。如果是这样的话,你会在运行时得到一个非常好的惊喜,除非你在头中定义了构造函数的主体,这通常是不推荐的。编译器已经告诉他了。为什么不告诉他为什么他不能?你不能,除非你在头中定义了构造函数的主体,这通常是不推荐的。编译器已经告诉他了。为什么不告诉他为什么不能呢?如果Object2没有可用的默认构造函数,这将失败。如果有,将初始化它两次。如果Object2没有可用的默认构造函数,则此操作将失败。并将初始化它两次,如果它这样做。