2012-11-24 74 views
0

我想調用構造函數H,但由於某種原因,它沒有被調用。 當我編譯我的代碼時,我得到沒有錯誤,並且我得到輸出:構造函數在主要調用,但對象沒有正確創建

對象初始化。

H object initialized。

如果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; 

} 
+0

請一次提出一個問題 –

回答

2

struct Heap沒有一個構造函數,採用A作爲參數。

但是,你可以用aArray這是std::vector<A>

Heap h(aArray); 

在C++中,除非你試圖用C兼容,否則只是使用class,而不是初始化^ h struct

+0

沒有警告,因爲堆h(A)被視爲函數聲明。 – fefe

2
Heap h(A); 

這聲明瞭名爲hHeap(A)類型的函數。也許你的意思是:

Heap h(aArray); 

這聲明瞭一個名爲hHeap類型的局部變量。

0

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

Heap h(A);聲明的函數h取作參數A類型的對象,並返回一個對象Heap

相關問題