在我的代码error: cannot convert 'Aircrafts' to 'Aircrafts*'
我要做的就是将一个类记录添加到一个向量中。
它是一个c ++代码并使用-ansi -Wall -pedantic
这有点让我烦恼。希望有人可以提供帮助。这是我的代码: 此行temp_aircraft = Aircrafts("Scenic", "Piper Arrow", 3, 120, 0, 0);
给出了错误
#include <iostream>
#include <string>
#include <stdlib.h>
#include <vector>
#include <iomanip>
using namespace std;
class Aircrafts
{
public:
string category;
string aircraft;
public:
Aircrafts () {
category = "";
aircraft = "";
}
Aircrafts (string f_cat, string airc) {
category = f_cat;
aircraft = airc;
}
}
void main()
{
vector <Aircrafts> aircraft_list;
Aircrafts *temp_aircraft;
temp_aircraft = new Aircrafts;
temp_aircraft = Aircrafts("Abc", "Xyz");
aircraft_list.push_back(*temp_aircraft);
}
答案 0 :(得分:3)
要修复间接级别的错误,可以替换
temp_aircraft = new Aircrafts;
temp_aircraft = Aircrafts("Abc", "Xyz");
与
temp_aircraft = new Aircrafts("Abc", "Xyz");
这是使用参数调用构造函数的正确语法。但是,这会造成内存泄漏。
你根本不需要new
- 你可以在不使用temp_aircraft
指针的情况下在一行上完成所有事情:
aircraft_list.push_back(Aircrafts("Abc", "Xyz"));
答案 1 :(得分:1)
您将Aircrafts
对象分配到指向Aircrafts
的指针。这不起作用。
查看代码,您根本不需要任何动态分配(= new
)。就这样做:
void main()
{
vector <Aircrafts> aircraft_list;
aircraft_list.push_back(Aircrafts("Abc", "Xyz"));
}
答案 2 :(得分:1)
不需要指针
Aircrafts temp_aircraft("Abc", "Xyz");
aircraft_list.push_back(temp_aircraft);
为什么初学者喜欢指针?
编辑我休息我的情况,OP选择了继续使用指针的答案,尽管其他每个答案都告诉他们指针是不必要的。
答案 3 :(得分:1)
首先,您将temp_aircraft
声明为指向Aircrafts
的指针,然后使用new
正确初始化。但是,然后尝试将非指针对象分配给指针。
此处不需要指针,只需创建对象并一次性将其推入容器中:
aircraft_list.push_back(Aircrafts("Abc", "Xyz"));
即使您没有定义显式的复制赋值运算符(编译器也会为您创建一个简单的),这将适用于您的类。但是你可能想要了解the rule of three。
答案 4 :(得分:1)
这行代码,
temp_aircraft = Aircrafts("Abc", "Xyz");
应该是
temp_aircraft = new Aircrafts("Abc", "Xyz");
请记住在课程结束时加入分号。
class Aircrafts
{
.....
}; // <-- semicolon here
答案 5 :(得分:1)
而不是
temp_aircraft = new Aircrafts;
temp_aircraft = Aircrafts("Abc", "Xyz");
你应该这样做:
temp_aircraft = new Aircrafts("Abc", "Xyz");
构造函数Aircrafts()为您提供飞机对象,同时temp_aircraft为Aircrafts *
P.S。你也有内存泄漏问题。您使用new
分配的所有内容,当您不再需要时,必须使用delete
免费;
你可以这样做:
Aircrafts *temp_aircraft;
temp_aircraft = new Aircrafts;
temp_aircraft = Aircrafts("Abc", "Xyz");
aircraft_list.push_back(*temp_aircraft);
delete temp_aircraft;
或者可能根本不需要指针。您可以通过一行获得相同的结果:
aircraft_list.push_back( Aircrafts("Abc", "Xyz") );
答案 6 :(得分:1)
不需要临时对象。
int main()
{
vector <Aircrafts> aircraft_list;
aircraft_list.emplace_back("Abc", "Xyz");
}
答案 7 :(得分:0)
temp_aircraft
是一个指针,所以当你尝试
temp_aircraft = Aircrafts("Scenic", "Piper Arrow", 3, 120, 0, 0);
您正尝试使用赋值运算符将飞机分配到temp_aircarft
当你说新的时,你可以使用这个构造函数:
temp_aircraft = new Aircrafts("Abc", "Xyz");
(或者不管是什么线都会产生错误)
当然,当你做的时候
aircraft_list.push_back(*temp_aircraft);
你将忘记删除指针。正如其他答案所说,你可以(并且应该)在没有指针的情况下这样做。
答案 8 :(得分:0)
问题出现在这一行:temp_aircraft = Aircrafts("Abc", "Xyz");
当您编写Aircrafts("Abc", "Xyz")
时,您创建了飞机类的对象,并尝试将其影响到Aircrafts *类型的变量(指向飞机的指针)。如果要创建指针,请使用运算符new
,如下所示:
temp_aircraft = new Aircrafts("Abc", "Xyz");
如果您不想要指针,请使用Aircraft类型创建变量,如下所示:
Aircrafts temp_aircraft;
在这里,你混合了两种方式,这就是为什么它不起作用。