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
没有无参数构造函数。
我有两个 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
没有无参数构造函数。