首页 > 解决方案 > 在 C++ 中,如何在主函数中创建一个类的全局实例(没有无参数构造函数)?

问题描述

我有一个用户定义类型的变量,我在主函数之外声明它,但我想在主函数中实例化它

这是我的代码。

#include <iostream>

class MyClass {
    private:
        int x;
    public: 
        MyClass(int x) {
            this->x = x + 1;
        }

        int GetX() {
            return x;
        }
};

MyClass myInstance; // <------ Why not?

void SomeFunction(MyClass a) {
    // do stuff with a
}

int ComplicatedFunction() {
    // do lots of work
    return 5;
}

int main()
{
    int x = ComplicatedFunction();

    myInstance = MyClass(x); <------ make instance here because need to calculate x first

    SomeFunction(myInstance);
}

所以我已经MyClass myInstance;在main之外声明了。在里面我尝试myInstance = MyClass(x);

编译器(clang)抱怨不允许全局声明,因为该类没有无参数构造函数。

  1. 我不想使用指针。
  2. 我不想添加无参数构造函数。
  3. 我不想在 main 之外实例化 myInstance。
  4. 这是为了学习。
  5. 如何使此代码正常工作?
  6. 我在这里错过了一些基本的 C++ 概念吗?

标签: c++

解决方案


虽然我不推荐它,但从技术上讲,您可以通过将全局变量设为可选来实现这一点:

std::optional<MyClass> myInstance;

int main()
{
    int x = ComplicatedFunction();

    myInstance = MyClass(x);    

    SomeFunction(*myInstance);
}

这可以满足您的所有要求。我承认,这不是一个指针,但它的行为非常像它。


推荐阅读