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

C++ Instantiate object who has no default constructor inside another classes constructor without pointers

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

这是我的设置:

Class of object 我正在尝试初始化其他 class B:

ClassA.h

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

我想创建这个对象的一个​​实例,它在实例化 Class B 时被实例化,因为我需要传递给 class B 的值来​​实例化 Class 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

}

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

ClassB.cpp

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

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

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

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

myClassA = &A(var1, var2);

我得到:

"nonstandard extension used: class rvalue used as lvalue"

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

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

编辑 2017 年 9 月 14 日:

我忘了说我也在尝试将 myClassA 作为 class 内部的 public 变量 B. 如果我没有默认构造函数,怎么可能我阻止它给我 "No Default Constructor" 错误?

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

Alex 的上述解释当然是正确的,但这里也有一个 link 给你:http://en.cppreference.com/w/cpp/language/initializer_list

基本上,如果它是 "after the : but before the constructor body",那么这些参数就是 "constructed"。永远不会调用默认构造函数。由于您只定义了一个非默认构造函数,因此您的 class A 没有无参数构造函数。