C++ C++;从数组访问重载构造函数

C++ C++;从数组访问重载构造函数,c++,arrays,constructor,C++,Arrays,Constructor,我试图从类B的数组中调用重载构造函数A(int,int),它只调用了一个()构造函数,而不是一个(int,int) 为什么会这样。? 我该怎么办呢?一旦对象已经构建好,就不能重新构建它 您有几个选择: 使用构造函数初始值设定项列表: class A{ int a; int b; A(){} A(int a, int b) : a(a), b(b){} }; class B{ A[3] a; public: void methodB(); }; B::method

我试图从类B的数组中调用重载构造函数A(int,int),它只调用了一个()构造函数,而不是一个(int,int) 为什么会这样。?
我该怎么办呢?

一旦对象已经构建好,就不能重新构建它

您有几个选择:

  • 使用构造函数初始值设定项列表:

    class A{
      int a;
      int b;
      A(){}
      A(int a, int b) : a(a), b(b){}
     };
    class B{
      A[3] a;
      public:
       void methodB();
    };
    B::methodB{
      a[0](1, 1); //I want array to use A(int, int)constructor not default one.
    }
    
  • 使用向量和默认值初始化构造函数初始值设定项列表中的所有元素

    class B
    {
        std::vector<A> a;
        ...
    };
    
    void B::methodB()
    {
        a.emplace_back(1, 1);
    }
    
    B类
    {
    std::载体a;
    公众:
    B():a{3,{1,1}
    {}
    };
    

创建时,请确保它实际生成(除非您发布了有关生成错误的帖子)。不要在问题中重新键入代码,而是复制并粘贴实际代码。
methodB
不是构造函数-您不能影响任何成员变量的构造-这已经完成并消除了。
class B
{
    std::vector<A> a;
    ...
};

void B::methodB()
{
    a.emplace_back(1, 1);
}
class B
{
    std::vector<A> a;
public:
    B() : a{3, {1, 1}}
    {}
};