不能在 C++ 中为停车场 OOP 声明抽象类型的变量
cannot declare variable of abstract type for Parking Lot OOP in C++
我有以下代码
Vehicle.h
:
#pragma once
class Vehicle
{
public:
Vehicle();
~Vehicle();
private:
int wheels;
};
Car.h
#pragma once
#include "Vehicle.h"
class Car: public Vehicle
{
public:
Car();
~Car();
private:
int wheels=4;
};
ParkingLot.h
#pragma once
#include <vector>
#include <string>
#include "ParkingSpace.h"
#include "HandicappedParkingSpace.h"
#include "CompactParkingSpace.h"
#include "RegularParkingSpace.h"
class ParkingLot
{
public:
ParkingLot();
~ParkingLot();
void ParkVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps);
void ReleaseVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps);
void getOccupiedSpaces();
private:
int value;
std::vector <HandicappedParkingSpace> occupied_handicapparkingspaces;
std::vector <HandicappedParkingSpace> vacant_handicapparkingspaces;
std::vector <RegularParkingSpace> occupied_regularparkingspaces;
std::vector <RegularParkingSpace> vacant_regularparkingspaces;
std::vector <CompactParkingSpace> occupied_compactparkingspaces;
std::vector <CompactParkingSpace> vacant_compactparkingspaces;
};
ParkingLot.cpp
:
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include "ParkingLot.h"
using namespace std
ParkingLot::ParkingLot() {
for (int i=0; i<5; i++) {
HandicappedParkingSpace HPS(1, Null);
vacant_handicapparkingspaces.push_back(HPS);
}
for (int i=0; i<5; i++) {
CompactParkingSpace CPS(1, Null);
vacant_compactparkingspaces.push_back(CPS);
}
for (int i=0; i<5; i++) {
RegularParkingSpace RPS(1, Null);
vacant_regularparkingspaces.push_back(RPS);
}
cout<<"finished parking lot"<<endl;
}
void ParkingLot::ParkVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps)
{
if (ps=="Handicapped") {
if (vacant_handicapparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_handicapparkingspaces.pop_back();
occupied_handicapparkingspaces.push_back(_ps);
}
else
{
cout<<"No handicapped spaces available"<<endl;
}
}
else if (ps=="Compact") {
if (vacant_compactparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_compactparkingspaces.pop_back();
occupied_compactparkingspaces.push_back(_ps);
}
else
{
cout<<"No compact spaces available"<<endl;
}
}
else {
if (vacant_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_regularparkingspaces.pop_back();
occupied_regularparkingspaces.push_back(_ps);
}
else {
cout<<"No regular spaces available"<<endl;
}
}
}
void ParkingLot::ReleaseVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps)
{
_ps.vacant=1;
_ps.vehicle= Null;
if (ps=="Handicapped") {
if (occupied_regularparkingspaces.size()!=0) {
vacant_handicapparkingspaces.push_back(_ps);
occupied_handicapparkingspaces.pop_back();
}
else {
cout<<"Unable to release any handicapped spaces"<<endl;
}
}
else if (ps=="Compact") {
if (occupied_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_compactparkingspaces.pop_back(_ps);
occupied_compactparkingspaces.push_back();
}
else {
cout<<"Unable to release any compact spaces"<<endl;
}
}
else {
if (occupied_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_regularparkingspaces.pop_back(_ps);
occupied_regularparkingspaces.push_back();
}
else {
cout<<"Unable to release any regular spaces"<<endl;
}
}
}
void ParkingLot::getOccupiedSpaces() {
cout<<"Occupied handicap spaces: "<<occupied_handicapparkingspaces.size()<<endl;
cout<<"Vacant handicap spaces: "<<vacant_handicapparkingspaces.size()<<endl;
cout<<"Occupied compact spaces: "<<occupied_compactparkingspaces.size()<<endl;
cout<<"Vacant compact spaces: "<<vacant_compactparkingspaces.size()<<endl;
cout<<"Occupied regular spaces: "<<occupied_regularparkingspaces.size()<<endl;
}
ParkingSpace.h
:
#pragma once
#include "Vehicle.h"
class ParkingSpace
{
public:
ParkingSpace();
~ParkingSpace();
virtual void parkvehicle()=0;
private:
Vehicle *vehicle;
bool vacant;
};
HandicappedParkingSpace.h
:
#pragma once
#include "ParkingSpace.h"
class HandicappedParkingSpace : public ParkingSpace
{
public:
HandicappedParkingSpace(int _vacant, Vehicle* _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~HandicappedParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
private:
int vacant;
Vehicle *vehicle;
};
RegularParkingSpace.h
:
#pragma once
#include "ParkingSpace.h"
class RegularParkingSpace : public ParkingSpace
{
public:
RegularParkingSpace(int _vacant, Vehicle* _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~RegularParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
private:
int vacant;
Vehicle *vehicle;
};
CompactParkingSpace.h
:
#pragma once
#include "ParkingSpace.h"
class CompactParkingSpace : public ParkingSpace
{
public:
CompactParkingSpace(int _vacant, Vehicle* _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~CompactParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
private:
int vacant;
Vehicle *vehicle;
};
main.cpp
:
#include "ParkingLot.h"
#include "HandicappedParkingSpace.h"
#include "RegularParkingSpace.h"
#include "CompactParkingSpace.h"
#include "Car.h"
#include <iostream>
using namespace std;
int main()
{
ParkingLot PL;
Car c1;
HandicappedParkingSpace HPS;
PL.ParkVehicle(c1, HPS, "Handicapped");
Car c2;
CompactParkingSpace CPS;
PL.ParkVehicle(c2, CPS, "Handicapped");
PL.getOccupiedSpaces();
cout<<"FINISHED"<<endl;
//delete d;
return 0;
}
这是我得到的错误:https://pastebin.com/p0vzb0Mz(错误太长了,我无法在此处 post)
有人可以帮忙吗?
编辑:
我修改了 ParkingLot.cpp
现在看起来像
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include "ParkingLot.h"
using namespace std;
ParkingLot::ParkingLot() {
for (int i=0; i<5; i++) {
HandicappedParkingSpace HPS(1, nullptr);
vacant_handicapparkingspaces.push_back(HPS);
}
for (int i=0; i<5; i++) {
CompactParkingSpace CPS(1, nullptr);
vacant_compactparkingspaces.push_back(CPS);
}
for (int i=0; i<5; i++) {
RegularParkingSpace RPS(1, nullptr);
vacant_regularparkingspaces.push_back(RPS);
}
cout<<"finished parking lot"<<endl;
}
void ParkingLot::ParkVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps)
{
if (ps=="Handicapped") {
if (vacant_handicapparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_handicapparkingspaces.pop_back();
occupied_handicapparkingspaces.push_back(_ps);
}
else
{
cout<<"No handicapped spaces available"<<endl;
}
}
else if (ps=="Compact") {
if (vacant_compactparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_compactparkingspaces.pop_back();
occupied_compactparkingspaces.push_back(_ps);
}
else
{
cout<<"No compact spaces available"<<endl;
}
}
else {
if (vacant_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_regularparkingspaces.pop_back();
occupied_regularparkingspaces.push_back(_ps);
}
else {
cout<<"No regular spaces available"<<endl;
}
}
}
void ParkingLot::ReleaseVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps)
{
//_ps.vacant=1;
//_ps.vehicle= nullptr;
_ps.setVehicle(1, nullptr);
if (ps=="Handicapped") {
if (occupied_regularparkingspaces.size()!=0) {
vacant_handicapparkingspaces.push_back(_ps);
occupied_handicapparkingspaces.pop_back();
}
else {
cout<<"Unable to release any handicapped spaces"<<endl;
}
}
else if (ps=="Compact") {
if (occupied_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_compactparkingspaces.push_back(_ps);
occupied_compactparkingspaces.pop_back();
}
else {
cout<<"Unable to release any compact spaces"<<endl;
}
}
else {
if (occupied_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_regularparkingspaces.push_back(_ps);
occupied_regularparkingspaces.pop_back();
}
else {
cout<<"Unable to release any regular spaces"<<endl;
}
}
}
void ParkingLot::getOccupiedSpaces() {
cout<<"Occupied handicap spaces: "<<occupied_handicapparkingspaces.size()<<endl;
cout<<"Vacant handicap spaces: "<<vacant_handicapparkingspaces.size()<<endl;
cout<<"Occupied compact spaces: "<<occupied_compactparkingspaces.size()<<endl;
cout<<"Vacant compact spaces: "<<vacant_compactparkingspaces.size()<<endl;
cout<<"Occupied regular spaces: "<<occupied_regularparkingspaces.size()<<endl;
cout<<"Vacant regular spaces: "<<vacant_regularparkingspaces.size()<<endl;
}
ParkingSpace.h
现在是
#pragma once
#include "Vehicle.h"
class ParkingSpace
{
public:
ParkingSpace();
~ParkingSpace();
virtual void parkvehicle(Vehicle _v)=0;
virtual void setVehicle(bool vacant, Vehicle _v);
private:
Vehicle vehicle;
bool vacant;
};
HandicappedParkingSpace.h
现在是
#pragma once
#include "ParkingSpace.h"
class HandicappedParkingSpace : public ParkingSpace
{
public:
HandicappedParkingSpace(int _vacant, Vehicle& _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~HandicappedParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
void setVehicle(bool _vacant, Vehicle _v) {
this->vacant=_vacant;
this->vehicle= _v;
}
private:
int vacant;
Vehicle vehicle;
};
RegularParkingSpace.h
现在是
#pragma once
#include "ParkingSpace.h"
class RegularParkingSpace : public ParkingSpace
{
public:
RegularParkingSpace(int _vacant, Vehicle& _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~RegularParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
void setVehicle(bool _vacant, Vehicle _v) {
this->vacant=_vacant;
this->vehicle= _v;
}
private:
int vacant;
Vehicle vehicle;
};
CompactParkingSpace.h
现在是
#pragma once
#include "ParkingSpace.h"
class CompactParkingSpace : public ParkingSpace
{
public:
CompactParkingSpace(int _vacant, Vehicle& _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~CompactParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
void setVehicle(bool _vacant, Vehicle _v) {
this->vacant=_vacant;
this->vehicle= _v;
}
private:
int vacant;
Vehicle vehicle;
};
main.cpp
现在是
#include "ParkingLot.h"
#include "HandicappedParkingSpace.h"
#include "RegularParkingSpace.h"
#include "CompactParkingSpace.h"
#include "Car.h"
#include <iostream>
using namespace std;
int main()
{
ParkingLot PL;
Car c1;
HandicappedParkingSpace HPS(1, nullptr);
PL.ParkVehicle(c1, HPS, "Handicapped");
Car c2;
CompactParkingSpace CPS(1, nullptr);
PL.ParkVehicle(c2, CPS, "Handicapped");
PL.getOccupiedSpaces();
cout<<"FINISHED"<<endl;
//delete d;
return 0;
}
但现在我收到这些错误,它们似乎主要与 nullptr
有关:https://pastebin.com/hVdcSc63
我认为 push_back
错误是因为我需要将 std:vector
等 occupied_handicapparkingspaces
从 <HandicappedParkingSpace>
更改为 <HandicappedParkingSpace&>
,然后我得到此错误:https://pastebin.com/QkWC6SRk
cannot declare variable of abstract type for Parking Lot OOP in C++
ParkingSpace是一个抽象class因为virtual void parkvehicle()=0;
,HandicappedParkingSpace继承了ParkingSpace 没有定义 parkvehicle 所以它也是一个抽象 class,那么你不能实例化 HandicappedParkingSpace 这就是为什么你有关于 HandicappedParkingSpace HPS(1, Null);
和等效情况
的错误
另请注意 Null 必须替换为 NULL 或更好的 nullptr,并且您有还有很多其他错误,我只是回答你的标题......
编辑后
我鼓励您不要混合使用 using namespace std;
和 std::xxx
,如果您使用 std[=55,请删除所有 using =]前缀
ParkingLot.cpp:13:41: error: no matching function for call to ‘HandicappedParkingSpace::HandicappedParkingSpace(int, std::nullptr_t)’
HandicappedParkingSpace HPS(1, nullptr);
HandicappedParkingSpace的构造函数第二个参数的类型是Vehicle&
,nulltr不兼容,你混淆Vehicle&
和Vehicle*
,只有一个指针可以取值nulltr
I thought the push_back errors were because I needed to change the std:vectors such as occupied_handicapparkingspaces from <HandicappedParkingSpace>
to <HandicappedParkingSpace&>
不,问题是你 occupied_handicapparkingspaces.push_back(_ps);
而 ps_
是 std::string
,std::string
不是 HandicappedParkingSpace 并且没有从 std::string
到 HandicappedParkingSpace
的转换
我有以下代码
Vehicle.h
:
#pragma once
class Vehicle
{
public:
Vehicle();
~Vehicle();
private:
int wheels;
};
Car.h
#pragma once
#include "Vehicle.h"
class Car: public Vehicle
{
public:
Car();
~Car();
private:
int wheels=4;
};
ParkingLot.h
#pragma once
#include <vector>
#include <string>
#include "ParkingSpace.h"
#include "HandicappedParkingSpace.h"
#include "CompactParkingSpace.h"
#include "RegularParkingSpace.h"
class ParkingLot
{
public:
ParkingLot();
~ParkingLot();
void ParkVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps);
void ReleaseVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps);
void getOccupiedSpaces();
private:
int value;
std::vector <HandicappedParkingSpace> occupied_handicapparkingspaces;
std::vector <HandicappedParkingSpace> vacant_handicapparkingspaces;
std::vector <RegularParkingSpace> occupied_regularparkingspaces;
std::vector <RegularParkingSpace> vacant_regularparkingspaces;
std::vector <CompactParkingSpace> occupied_compactparkingspaces;
std::vector <CompactParkingSpace> vacant_compactparkingspaces;
};
ParkingLot.cpp
:
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include "ParkingLot.h"
using namespace std
ParkingLot::ParkingLot() {
for (int i=0; i<5; i++) {
HandicappedParkingSpace HPS(1, Null);
vacant_handicapparkingspaces.push_back(HPS);
}
for (int i=0; i<5; i++) {
CompactParkingSpace CPS(1, Null);
vacant_compactparkingspaces.push_back(CPS);
}
for (int i=0; i<5; i++) {
RegularParkingSpace RPS(1, Null);
vacant_regularparkingspaces.push_back(RPS);
}
cout<<"finished parking lot"<<endl;
}
void ParkingLot::ParkVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps)
{
if (ps=="Handicapped") {
if (vacant_handicapparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_handicapparkingspaces.pop_back();
occupied_handicapparkingspaces.push_back(_ps);
}
else
{
cout<<"No handicapped spaces available"<<endl;
}
}
else if (ps=="Compact") {
if (vacant_compactparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_compactparkingspaces.pop_back();
occupied_compactparkingspaces.push_back(_ps);
}
else
{
cout<<"No compact spaces available"<<endl;
}
}
else {
if (vacant_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_regularparkingspaces.pop_back();
occupied_regularparkingspaces.push_back(_ps);
}
else {
cout<<"No regular spaces available"<<endl;
}
}
}
void ParkingLot::ReleaseVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps)
{
_ps.vacant=1;
_ps.vehicle= Null;
if (ps=="Handicapped") {
if (occupied_regularparkingspaces.size()!=0) {
vacant_handicapparkingspaces.push_back(_ps);
occupied_handicapparkingspaces.pop_back();
}
else {
cout<<"Unable to release any handicapped spaces"<<endl;
}
}
else if (ps=="Compact") {
if (occupied_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_compactparkingspaces.pop_back(_ps);
occupied_compactparkingspaces.push_back();
}
else {
cout<<"Unable to release any compact spaces"<<endl;
}
}
else {
if (occupied_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_regularparkingspaces.pop_back(_ps);
occupied_regularparkingspaces.push_back();
}
else {
cout<<"Unable to release any regular spaces"<<endl;
}
}
}
void ParkingLot::getOccupiedSpaces() {
cout<<"Occupied handicap spaces: "<<occupied_handicapparkingspaces.size()<<endl;
cout<<"Vacant handicap spaces: "<<vacant_handicapparkingspaces.size()<<endl;
cout<<"Occupied compact spaces: "<<occupied_compactparkingspaces.size()<<endl;
cout<<"Vacant compact spaces: "<<vacant_compactparkingspaces.size()<<endl;
cout<<"Occupied regular spaces: "<<occupied_regularparkingspaces.size()<<endl;
}
ParkingSpace.h
:
#pragma once
#include "Vehicle.h"
class ParkingSpace
{
public:
ParkingSpace();
~ParkingSpace();
virtual void parkvehicle()=0;
private:
Vehicle *vehicle;
bool vacant;
};
HandicappedParkingSpace.h
:
#pragma once
#include "ParkingSpace.h"
class HandicappedParkingSpace : public ParkingSpace
{
public:
HandicappedParkingSpace(int _vacant, Vehicle* _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~HandicappedParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
private:
int vacant;
Vehicle *vehicle;
};
RegularParkingSpace.h
:
#pragma once
#include "ParkingSpace.h"
class RegularParkingSpace : public ParkingSpace
{
public:
RegularParkingSpace(int _vacant, Vehicle* _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~RegularParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
private:
int vacant;
Vehicle *vehicle;
};
CompactParkingSpace.h
:
#pragma once
#include "ParkingSpace.h"
class CompactParkingSpace : public ParkingSpace
{
public:
CompactParkingSpace(int _vacant, Vehicle* _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~CompactParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
private:
int vacant;
Vehicle *vehicle;
};
main.cpp
:
#include "ParkingLot.h"
#include "HandicappedParkingSpace.h"
#include "RegularParkingSpace.h"
#include "CompactParkingSpace.h"
#include "Car.h"
#include <iostream>
using namespace std;
int main()
{
ParkingLot PL;
Car c1;
HandicappedParkingSpace HPS;
PL.ParkVehicle(c1, HPS, "Handicapped");
Car c2;
CompactParkingSpace CPS;
PL.ParkVehicle(c2, CPS, "Handicapped");
PL.getOccupiedSpaces();
cout<<"FINISHED"<<endl;
//delete d;
return 0;
}
这是我得到的错误:https://pastebin.com/p0vzb0Mz(错误太长了,我无法在此处 post)
有人可以帮忙吗?
编辑:
我修改了 ParkingLot.cpp
现在看起来像
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include "ParkingLot.h"
using namespace std;
ParkingLot::ParkingLot() {
for (int i=0; i<5; i++) {
HandicappedParkingSpace HPS(1, nullptr);
vacant_handicapparkingspaces.push_back(HPS);
}
for (int i=0; i<5; i++) {
CompactParkingSpace CPS(1, nullptr);
vacant_compactparkingspaces.push_back(CPS);
}
for (int i=0; i<5; i++) {
RegularParkingSpace RPS(1, nullptr);
vacant_regularparkingspaces.push_back(RPS);
}
cout<<"finished parking lot"<<endl;
}
void ParkingLot::ParkVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps)
{
if (ps=="Handicapped") {
if (vacant_handicapparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_handicapparkingspaces.pop_back();
occupied_handicapparkingspaces.push_back(_ps);
}
else
{
cout<<"No handicapped spaces available"<<endl;
}
}
else if (ps=="Compact") {
if (vacant_compactparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_compactparkingspaces.pop_back();
occupied_compactparkingspaces.push_back(_ps);
}
else
{
cout<<"No compact spaces available"<<endl;
}
}
else {
if (vacant_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_regularparkingspaces.pop_back();
occupied_regularparkingspaces.push_back(_ps);
}
else {
cout<<"No regular spaces available"<<endl;
}
}
}
void ParkingLot::ReleaseVehicle(Vehicle _v, ParkingSpace& _ps, std::string ps)
{
//_ps.vacant=1;
//_ps.vehicle= nullptr;
_ps.setVehicle(1, nullptr);
if (ps=="Handicapped") {
if (occupied_regularparkingspaces.size()!=0) {
vacant_handicapparkingspaces.push_back(_ps);
occupied_handicapparkingspaces.pop_back();
}
else {
cout<<"Unable to release any handicapped spaces"<<endl;
}
}
else if (ps=="Compact") {
if (occupied_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_compactparkingspaces.push_back(_ps);
occupied_compactparkingspaces.pop_back();
}
else {
cout<<"Unable to release any compact spaces"<<endl;
}
}
else {
if (occupied_regularparkingspaces.size()!=0) {
_ps.parkvehicle(_v);
vacant_regularparkingspaces.push_back(_ps);
occupied_regularparkingspaces.pop_back();
}
else {
cout<<"Unable to release any regular spaces"<<endl;
}
}
}
void ParkingLot::getOccupiedSpaces() {
cout<<"Occupied handicap spaces: "<<occupied_handicapparkingspaces.size()<<endl;
cout<<"Vacant handicap spaces: "<<vacant_handicapparkingspaces.size()<<endl;
cout<<"Occupied compact spaces: "<<occupied_compactparkingspaces.size()<<endl;
cout<<"Vacant compact spaces: "<<vacant_compactparkingspaces.size()<<endl;
cout<<"Occupied regular spaces: "<<occupied_regularparkingspaces.size()<<endl;
cout<<"Vacant regular spaces: "<<vacant_regularparkingspaces.size()<<endl;
}
ParkingSpace.h
现在是
#pragma once
#include "Vehicle.h"
class ParkingSpace
{
public:
ParkingSpace();
~ParkingSpace();
virtual void parkvehicle(Vehicle _v)=0;
virtual void setVehicle(bool vacant, Vehicle _v);
private:
Vehicle vehicle;
bool vacant;
};
HandicappedParkingSpace.h
现在是
#pragma once
#include "ParkingSpace.h"
class HandicappedParkingSpace : public ParkingSpace
{
public:
HandicappedParkingSpace(int _vacant, Vehicle& _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~HandicappedParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
void setVehicle(bool _vacant, Vehicle _v) {
this->vacant=_vacant;
this->vehicle= _v;
}
private:
int vacant;
Vehicle vehicle;
};
RegularParkingSpace.h
现在是
#pragma once
#include "ParkingSpace.h"
class RegularParkingSpace : public ParkingSpace
{
public:
RegularParkingSpace(int _vacant, Vehicle& _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~RegularParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
void setVehicle(bool _vacant, Vehicle _v) {
this->vacant=_vacant;
this->vehicle= _v;
}
private:
int vacant;
Vehicle vehicle;
};
CompactParkingSpace.h
现在是
#pragma once
#include "ParkingSpace.h"
class CompactParkingSpace : public ParkingSpace
{
public:
CompactParkingSpace(int _vacant, Vehicle& _v) {
this->vacant=_vacant;
this->vehicle=_v;
}
~CompactParkingSpace();
void parkvehicle(Vehicle _v) {
this->vacant=0;
this->vehicle=_v;
}
void setVehicle(bool _vacant, Vehicle _v) {
this->vacant=_vacant;
this->vehicle= _v;
}
private:
int vacant;
Vehicle vehicle;
};
main.cpp
现在是
#include "ParkingLot.h"
#include "HandicappedParkingSpace.h"
#include "RegularParkingSpace.h"
#include "CompactParkingSpace.h"
#include "Car.h"
#include <iostream>
using namespace std;
int main()
{
ParkingLot PL;
Car c1;
HandicappedParkingSpace HPS(1, nullptr);
PL.ParkVehicle(c1, HPS, "Handicapped");
Car c2;
CompactParkingSpace CPS(1, nullptr);
PL.ParkVehicle(c2, CPS, "Handicapped");
PL.getOccupiedSpaces();
cout<<"FINISHED"<<endl;
//delete d;
return 0;
}
但现在我收到这些错误,它们似乎主要与 nullptr
有关:https://pastebin.com/hVdcSc63
我认为 push_back
错误是因为我需要将 std:vector
等 occupied_handicapparkingspaces
从 <HandicappedParkingSpace>
更改为 <HandicappedParkingSpace&>
,然后我得到此错误:https://pastebin.com/QkWC6SRk
cannot declare variable of abstract type for Parking Lot OOP in C++
ParkingSpace是一个抽象class因为virtual void parkvehicle()=0;
,HandicappedParkingSpace继承了ParkingSpace 没有定义 parkvehicle 所以它也是一个抽象 class,那么你不能实例化 HandicappedParkingSpace 这就是为什么你有关于 HandicappedParkingSpace HPS(1, Null);
和等效情况
另请注意 Null 必须替换为 NULL 或更好的 nullptr,并且您有还有很多其他错误,我只是回答你的标题......
编辑后
我鼓励您不要混合使用 using namespace std;
和 std::xxx
,如果您使用 std[=55,请删除所有 using =]前缀
ParkingLot.cpp:13:41: error: no matching function for call to ‘HandicappedParkingSpace::HandicappedParkingSpace(int, std::nullptr_t)’ HandicappedParkingSpace HPS(1, nullptr);
HandicappedParkingSpace的构造函数第二个参数的类型是Vehicle&
,nulltr不兼容,你混淆Vehicle&
和Vehicle*
,只有一个指针可以取值nulltr
I thought the push_back errors were because I needed to change the std:vectors such as occupied_handicapparkingspaces from
<HandicappedParkingSpace>
to<HandicappedParkingSpace&>
不,问题是你 occupied_handicapparkingspaces.push_back(_ps);
而 ps_
是 std::string
,std::string
不是 HandicappedParkingSpace 并且没有从 std::string
到 HandicappedParkingSpace