gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:26 25 4
gpt4 key购买 nike

<分区>

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com