<分区>
我有两个类,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)变量。如果我没有默认构造函数,我怎么能阻止它给我“没有默认构造函数”错误?