【问题标题】:Object initialization problem in C++ header fileC++头文件中的对象初始化问题
【发布时间】:2011-05-24 02:01:00
【问题描述】:

我正在使用 C++ 进行编码,并且我在类的头文件中有私有数据成员。

private:
      Object1 obj1;
      Object2 obj2(&obj1);

所以,第二个对象需要一个指向第一个对象的指针。当我尝试编译程序时,出现以下错误:

“‘&’标记之前的预期标识符”

有没有办法在实现文件中实例化这个类的构造函数中的对象而不是它的定义?我该如何纠正这个错误?程序无法编译。

【问题讨论】:

    标签: c++ pointers header ampersand


    【解决方案1】:

    在 C++ 中,您不能将成员初始化为类定义的一部分。这种操作应该在构造函数中完成:

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

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

    【讨论】:

      【解决方案2】:

      你的编译器告诉你这个错误是你试图创建一个名为obj2的方法,返回一个Object2,它将引用作为参数。但它无法弄清楚引用的类型是什么。

      另一方面,如果你想在构造对象之前设置引用,你可以这样写:

      Object2* obj2 = &obj1;
      

      编辑

      如何纠正这个错误?程序不会编译。

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

      【讨论】:

      • 谢谢。这解决了问题。
      • 欢迎您,如果这解决了您的问题,请标记为已回答。
      • ...如果Object2Object1 是完全不同的类型怎么办?
      • @Nawaz,这是一种可能性。如果是这样的话,你会在运行时得到一个相当不错的惊喜
      【解决方案3】:

      你不能这样写:

       Object2 obj2(&obj1);
      

      使用构造函数初始化对象,像这样:

      class Sample
      {
      private:
            Object1 obj1;
            Object2 obj2;
      public:
           Sample(Object1 o1)  : obj1(o1), obj2(&o1)
           { 
           }
      };
      

      阅读本文以详细了解这一点:

      http://www.cprogramming.com/tutorial/initialization-lists-c++.html

      【讨论】:

      • 你不要,除非你在header中定义了构造函数的body,一般不推荐。
      • 编译器已经告诉他了。为什么不告诉他为什么他不能?
      【解决方案4】:

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

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

      【讨论】:

      • 如果 Object2 没有可用的默认构造函数,这将失败。如果确实如此,则会对其进行两次初始化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多