C++实例化在另一个没有指针的类构造函数中没有默认构造函数的对象

标签 c++ object constructor instantiation

<分区>

我有两个类,A 类和 B 类。我不希望它们中的任何一个都有默认构造函数,因为它们都需要使用参数进行实例化。但是,我似乎无法在不使用默认公共(public)构造函数的情况下在类 B 内部创建类 A 的对象,该构造函数允许在没有用户定义值的情况下实例化类(试图避免默认值)。

这是我的设置:

我试图在其他类 B 中初始化的对象类:

ClassA.h

Class A  //No default constructor
{
public:
    A(int var1, int var2);    //Class A's Constructor
}

我想创建这个对象的一个​​实例,它在实例化 B 类时实例化,因为我需要传递给 B 类的值来实例化 A 类。

ClassB.h

Class B   //No default Constructor
{
public:
    A myClassA;    //The public variable in class B I want to hold an object of class A

    int somePublicVar;

    B(int var1, int var2, int var3);    //Class B's Constructor

}

我似乎无法实例化 A 类型的 myClassA 对象。

ClassB.cpp

B::B(int var1, int var2, int var3)
{
    B = A(var1, var2);
    somePublicVar = var3
}

我是 C++ 的新手,但我对 C#C 非常熟悉。但我似乎无法找到正确的语法/过程来完成它。

我阅读与此问题相关的问题越多,就越觉得使用指针来实现这个是解决此问题的“初学者”方法,因为对象将需要手动销毁,所以我正在尝试在没有指针的情况下执行此操作。是否可以?此过程的最佳做法是什么?

如果我必须实现这一点,我会求助于指针,但我也在为该操作而苦苦挣扎,因为如果我将 A 定义为指针而不是对象,那么在执行此操作时会出现错误:

myClassA = &A(var1, var2);

我得到:

"nonstandard extension used: class rvalue used as lvalue"

因为我的理解是A(var1, var2)作用域是构造函数,构造函数完成后会被删除,所以我们不能保存指向它的指针。所以我也不确定在这种情况下我将如何利用指针方法。

我似乎只能找到这个问题的部分答案,但似乎没有一个能满足所有条件。感谢您的帮助。

编辑 2017 年 9 月 14 日:

我忘了说我也在尝试将 myClassA 作为类 B 中的公共(public)变量。如果我没有默认构造函数,我怎么能阻止它给我“没有默认构造函数”错误?

最佳答案

B::B(int var1, int var2, int var3) : myClassA(var1, var2)
{}

关于C++实例化在另一个没有指针的类构造函数中没有默认构造函数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46226839/

相关文章:

c++ - 这是使用 std::sort() 的最佳方式吗?

c++ - 如何从双端队列中删除随机元素

java - 如何初始化匿名类的对象?

C# .Net Core 依赖注入(inject),向构造函数注入(inject)多个参数

c++ - 我们有一个 vector ,但不清楚调用哪个构造函数

c++ - 在 Linux 上编译外部库的问题

c++ - Qt 鼠标控制触摸和非触摸设备上的旋转

javascript - 我的对象在数组中被覆盖

JavaScript:将 Json 数据数组更改为新格式

c++ - C++ 中 32 位和 64 位 Mach-O 二进制/可执行格式的解析器