0

コンストラクター 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;

}
4

3 に答える 3

2
Heap h(A);

Heap(A)これは、という名前のタイプの関数を宣言しますh。おそらくあなたは意味しました:

Heap h(aArray);

Heapこれは、という名前のタイプのローカル変数を宣言しますh

于 2012-11-24T03:18:16.840 に答える
2

引数として取るコンストラクターがありませstruct Heapん。A

std::vector<A>ただし、タイプであるaArrayでhを初期化できます

Heap h(aArray);

C++ では、C との互換性を維持しようとしている場合を除き、それ以外の場合はclass代わりにstruct

于 2012-11-24T03:17:19.490 に答える
0

Heap h(aArray);の代わりに使用Heap h(A);

この行は、型のオブジェクトをパラメーターとしてHeap h(A);受け取る関数を宣言し、オブジェクトを返します。hAHeap

于 2012-11-24T03:20:06.267 に答える