构造函数在 main 中调用,但对象未正确创建

constructor called in main, but object not created properly

本文关键字:对象 创建 main 调用 构造函数      更新时间:2023-10-16

我正在尝试调用构造函数H,但由于某种原因没有调用它。编译代码时没有错误,并且得到输出:

已初始化的对象。

H 对象已初始化。

如果 H 已正确初始化,则还应显示来自构造函数的 cout。

有人可以帮忙吗?谢谢。

我还有一个问题。如何更改 hVec[i].a 的值并具有aArray[i].a 也采用这个值?我知道我应该使用指针,但非常困惑。很抱歉所有的问题;我对C++编程相对陌生。

#include <vector>
#include <iostream>
struct A
{
  A(int av):a(av){}
     
    int a;
};
struct Heap
{
  
  Heap(std::vector<A> hVal)
  {
      std::cout << "Constructor for H object. n";
      for (int i=0; i<hVal.size(); ++i) 
      {
          hVec.push_back(hVal[i]);
          std::cout << "hVec[i].a = " << hVec[i].a << "   ";
      }
      std::cout << std::endl;
  }
  
  std::vector<A> hVec;
};

int main()
{
  A a0(2), a1(4), a2(8);  
  std::vector<A> aArray;  
  aArray.push_back(a0);
  aArray.push_back(a1);
  aArray.push_back(a2);         
  std::cout << "A object initialized. n";
  Heap h(A);
  std::cout << "H object initialized. n";
  
  return 0;
}

您的struct Heap没有将A作为参数的构造函数。

但是,您可以使用std::vector<A>类型的数组初始化 h

Heap h(aArray);

在C++中,除非你试图与C兼容,否则只需使用class而不是struct

Heap h(A);

这将声明一个名为 hHeap(A) 类型函数。 也许你的意思是:

Heap h(aArray);

这将声明一个名为 hHeap 类型的局部变量。

使用 Heap h(aArray); 而不是 Heap h(A);

该行Heap h(A);声明一个函数h将类型为 A 的对象作为参数,并返回一个对象Heap