为我在C+中创建的对象声明变量+; 我是一个java家伙,我正在尝试用C++做一个类的作业。我很难将我创建的类型的变量声明为另一个类的属性。这是我的方法 private: HeatingUnit heatingUnit; int tempToMaintain; public: BangBangControl(int tempToMaintain, bool isOn, int initialTemp){ heatingUnit= new HeatingUnit(isOn, initialTemp); this -> tempToMaintain = tempToMaintain; }

为我在C+中创建的对象声明变量+; 我是一个java家伙,我正在尝试用C++做一个类的作业。我很难将我创建的类型的变量声明为另一个类的属性。这是我的方法 private: HeatingUnit heatingUnit; int tempToMaintain; public: BangBangControl(int tempToMaintain, bool isOn, int initialTemp){ heatingUnit= new HeatingUnit(isOn, initialTemp); this -> tempToMaintain = tempToMaintain; },c++,object,constructor,declaration,C++,Object,Constructor,Declaration,我得到这个错误 BangBangControl.cpp:在构造函数“BangBangControl::BangBangControl(int,bool,int)”中: BangBangControl.cpp:15:错误:与“((BangBangControl*)this)->BangBangControl::heatingUnit=(((heatingUnit*)运算符新(8u)),(->heatingUnit::heatingUnit((int)isOn),initialTemp),)中的“运

我得到这个错误

BangBangControl.cpp:在构造函数“BangBangControl::BangBangControl(int,bool,int)”中:
BangBangControl.cpp:15:错误:与“((BangBangControl*)this)->BangBangControl::heatingUnit=(((heatingUnit*)运算符新(8u)),(->heatingUnit::heatingUnit((int)isOn),initialTemp),)中的“运算符=”不匹配
h:6:注意:候选项是:HeatingUnit&HeatingUnit::operator=(const HeatingUnit&)
BangBangControl.cpp:在成员函数“int BangBangControl::main()”中:
BangBangControl.cpp:37:错误:与“运算符”不匹配
应该是:

HeatingUnit *heatingUnit;
            ^^
我相信您的意图是创建类型为
HeatingUnit
的指针,因为您在构造函数中使用了
new
new
用于将空闲存储区中的内存分配给指针变量

如果您无意创建指针(我不确定,因为您是从没有指针的java迁移过来的),只需使用:

   HeatingUnit heatingUnit;
但不要使用`new来分配构造函数中的内存

应该是:

HeatingUnit *heatingUnit;
            ^^
我相信您的意图是创建类型为
HeatingUnit
的指针,因为您在构造函数中使用了
new
new
用于将空闲存储区中的内存分配给指针变量

如果您无意创建指针(我不确定,因为您是从没有指针的java迁移过来的),只需使用:

   HeatingUnit heatingUnit;

但是不要使用'new'来分配构造函数中的内存。

变量声明应该是

HeatingUnit *heatingUnit;
new HeatingUnit
返回一个指针
HeatingUnit*
,要保持该指针,您需要一个指针

关于您的信息,这里有另一种方式(有其局限性,但您感觉有点像Java):

private:
HeatingUnit&HeatingUnit;//诱惑维持=诱惑维持;
}
请注意,我们正在构造函数的初始值设定项列表中定义
heatingUnit
。您也可以对
临时维护
执行此操作

现在
heatingUnit
可以与
操作符一起使用,比如Java,而不是
->


除了C++之外,你应该使用<代码>新< /C>。在您的特定情况下,
HeatingUnit HeatingUnit就足够了,它声明了一个自动对象,并且不需要手动解除分配。

变量声明应该是

HeatingUnit *heatingUnit;
new HeatingUnit
返回一个指针
HeatingUnit*
,要保持该指针,您需要一个指针

关于您的信息,这里有另一种方式(有其局限性,但您感觉有点像Java):

private:
HeatingUnit&HeatingUnit;//诱惑维持=诱惑维持;
}
请注意,我们正在构造函数的初始值设定项列表中定义
heatingUnit
。您也可以对
临时维护
执行此操作

现在
heatingUnit
可以与
操作符一起使用,比如Java,而不是
->


除了C++之外,你应该使用<代码>新< /C>。在您的特定情况下,
HeatingUnit HeatingUnit就足够了,声明了一个自动对象,不需要手动进行任何的分配。C++中的

< p>创建没有<代码>新< /C> >,除非您想将它们放在堆中。要将它们放入堆中,需要使用指针,例如

HeatingUnit* heatingUnit;
但是,实际需要的是从成员初始值设定项列表中初始化对象:

BangBangControl(int tempToMaintain_, bool isOn, int initialTemp):
    heatingUnit(isOn, initialTemp),
    tempToMaintain(tempToMaintain_)
{
}

在C++对象中,不创建代码< <新>代码>,除非您想把它们放在堆上。要将它们放入堆中,需要使用指针,例如

HeatingUnit* heatingUnit;
但是,实际需要的是从成员初始值设定项列表中初始化对象:

BangBangControl(int tempToMaintain_, bool isOn, int initialTemp):
    heatingUnit(isOn, initialTemp),
    tempToMaintain(tempToMaintain_)
{
}
如果您想这样做:

heatingUnit= new HeatingUnit(isOn, initialTemp);
你必须改变

HeatingUnit heatingUnit

为什么??因为在Java中,所有对象只能默认保存对对象的引用,而在C++中这样做则必须声明它是指针,而C++对象中可以有子对象作为字段(不能用java java)。 <爪哇>,在构造函数的主体中进行初始化,C++是使用初始化列表的好实践。
BangBangControl(int tempToMaintain, bool isOn, int initialTemp)
: heatingUnit(new HeatingUnit(isOn, initialTemp)),
  tempToMaintain(tempToMaintain)
{ }
但是,使用
new
需要您自己使用
delete
清理内存,因此以下可能更可取:

BangBangControl(int tempToMaintain, bool isOn, int initialTemp)
: heatingUnit(isOn, initialTemp),
  tempToMaintain(tempToMaintain)
{ }
如果您想这样做:

heatingUnit= new HeatingUnit(isOn, initialTemp);
你必须改变

HeatingUnit heatingUnit

为什么??因为在Java中,所有对象只能默认保存对对象的引用,而在C++中这样做则必须声明它是指针,而C++对象中可以有子对象作为字段(不能用java java)。 <爪哇>,在构造函数的主体中进行初始化,C++是使用初始化列表的好实践。
BangBangControl(int tempToMaintain, bool isOn, int initialTemp)
: heatingUnit(new HeatingUnit(isOn, initialTemp)),
  tempToMaintain(tempToMaintain)
{ }
但是,使用
new
需要您自己使用
delete
清理内存,因此以下可能更可取:

BangBangControl(int tempToMaintain, bool isOn, int initialTemp)
: heatingUnit(isOn, initialTemp),
  tempToMaintain(tempToMaintain)
{ }

也许java C++ java语言中的“<代码> java java/代码>标签,因为它与Java无关。@ HoVrCRAFTFulfFeels:他也应该删除他的<代码> [java] /Cord>心态。值得注意的是,在C++中,构造函数不工作于Java。在Java中,语法总是
Thing a=newthing(),但是在C++中,只有当您想在堆上创建对象时,才有语法。如果你想构造一个实际的对象,你应该把它创建为
一个东西或带有参数的
对象a(1,2,“红色”、“蓝色”)。也许你应该从这个问题中删除你的
java
标记,因为它与java无关。@HovercraftFullOfEels:他也应该删除他的
[java]
心态。这是