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

时间:2012-11-24 03:10:53

标签: c++ constructor output

我试图调用构造函数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;

}

3 个答案:

答案 0 :(得分:2)

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

但是,您可以使用aArray std::vector<A>类型

初始化h
Heap h(aArray);

在C ++中,除非您尝试与C兼容,否则只需使用class代替struct

答案 1 :(得分:2)

Heap h(A);

这声明了一个名为Heap(A)的{​​{1}}类型的函数。也许你的意思是:

h

这声明了一个名为Heap h(aArray); 的{​​{1}}类型的局部变量。

答案 2 :(得分:0)

使用Heap h(aArray);代替Heap h(A);

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