2012-11-24 47 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

相关问题