【问题标题】:How do you declare an object in C++? [closed]如何在 C++ 中声明对象? [关闭]
【发布时间】:2014-07-05 20:53:26
【问题描述】:

超级简单:如何在 C++ 中声明(非指针)对象?

我试过了:

Object obj;

但 C++ 编译器认为这是对对象默认构造函数的调用。甚至可以在 C++ 中转发声明对象吗?

编辑:我认为没有人理解我的问题。为什么你可以声明int x;Object* objptr;,但不能声明Object obj;?我需要这个,因为 main 之外的结构必须识别对象(因此它需要在 main 之外,在结构之前 declared),但是如果对象没有在 main 内部初始化,那么我正在使用的库无法正常运行。

【问题讨论】:

  • 嗯,是的,它必须被构造以便你可以使用它,除非它是一个基本类型。这不是 Java 或 C#。如果您 100% 确定需要可选对象,请使用 boost::optional
  • extern Object obj; 适用于任何类型。不要忘记在一个编译单元中正确定义,否则会出现未定义的引用错误。
  • @user3553031:当然可以。
  • @Deduplicator 如果没有实例化它就不是一个对象。
  • int x; 不仅仅是一个声明。这是一个定义。

标签: c++ object forward-declaration


【解决方案1】:

您不能实例化不完整类的对象(即仅前向声明的类)。但是,您可以定义指向它们的指针和引用:

class Object;

Object *myObject;

class Object {
    int someMember;
};

C# 和 Java 默认使用引用,这不适用于 C++。

【讨论】:

    【解决方案2】:

    可以有任意数量

    extern Type var; // declaration
    

    应该正好是一个

    Type var; // definition & declaration
    

    Type 已经在翻译单元中定义,在声明之前

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 2018-10-16
      • 1970-01-01
      相关资源
      最近更新 更多