当类的构造函数有参时,在另外一个类里面定义这个类的对象该如何做

当类的构造函数有参时,在另外一个类里面定义这个类的对象该怎么做?
下面这个程序   编译会错
#include   <iostream.h>
class   haha
{
public:
int   num;
haha(int   i);
void   output();
};
haha::haha(int   i)
{
num=i;
}
void   haha::output()
{
cout < <num < <endl;
}
class   henhen
{
public:
henhen();
haha   o(int   i);
};
henhen::henhen()
{
haha   o=new   haha(2);
}
int   main()
{
henhen   hehe;
hehe.o.output();
return   1;
}
就是hehe.o.output();这句错,意思就是o其实不是一个结构体或者类。
但是我把鼠标移到上面明明又显示是一个对象。
请指教。
回答给分。

------解决方案--------------------
class henhen
{
public:
henhen();
haha o(int i);
};
haha o(int i);// o是成员函数了
haha o;
------解决方案--------------------
class henhen
{
public:
henhen();
haha o;
};
henhen::henhen()
{
o=haha(2);
}

------解决方案--------------------
haha o=new haha(2);
===>
这个是Java语法, 不是C++语法

C++;
haha* o = new haha(2);

or
haha o(2);

or
o = haha(2);

:))))
------解决方案--------------------
LZ需要用initializer. 这样就对了:

class henhen
{
public:
henhen();
haha o;
};

henhen::henhen() : haha(2)
{
}
------解决方案--------------------
应该用初始化列表进行初始化,不能和你那样直接掉用带参构造函数...常量也是这样子的