c++ - 在 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)抱怨不允许全局声明,因为该类没有无参数构造函数。
- 我不想使用指针。
- 我不想添加无参数构造函数。
- 我不想在 main 之外实例化 myInstance。
- 这是为了学习。
- 如何使此代码正常工作?
- 我在这里错过了一些基本的 C++ 概念吗?
解决方案
虽然我不推荐它,但从技术上讲,您可以通过将全局变量设为可选来实现这一点:
std::optional<MyClass> myInstance;
int main()
{
int x = ComplicatedFunction();
myInstance = MyClass(x);
SomeFunction(*myInstance);
}
这可以满足您的所有要求。我承认,这不是一个指针,但它的行为非常像它。
推荐阅读
- c - 如何将字符数组从第二个数组交换到最后一个第二个数组
- c# - 如何处理 .NET Core 应用程序中的自定义错误
- java - 是否有 mongodb 查询来合并特定 mongodb 文档中的字段
- c# - ASPX 无法加载类型
- reactjs - 如何在无限滚动页面上保留/恢复滚动位置?
- python - jupyter notebook 中文件名的“CSV 文件不存在”
- sql - 我可以将一个查询的输出用作另一个选择子句中的列吗
- java - 为什么索引从 10 开始,即使我在 { for int i =0;}
- javascript - 如何使用代理访问类中的原始功能?
- javascript - 我想创建一个可以有多个列表项的水平导航栏