gpt4 book ai didi

c++ - C++ 中的空对象

转载 作者:太空狗 更新时间:2023-10-29 19:37:39 25 4
gpt4 key购买 nike

我正在尝试检查 ship 对象是否为 null,但我收到一条错误消息

Crane.cpp:18: error: could not convert ‘((Crane*)this)->Crane::ship.Ship::operator=(((const Ship&)(& Ship(0, std::basic_string, std::allocator >(((const char*)"arrive"), ((const std::allocator&)((const std::allocator)(& std::allocator())))), std::basic_string, std::allocator >(((const char)"Ship"), ((const std::allocator&)((const std::allocator*)(& std::allocator()))))))))’ to ‘bool’

Crane::Crane(int craneId, int craneStatus, bool free, Ship ship)
{
setCraneId(craneId);
setCraneStatus(craneStatus);
setFree(free);
setShip(ship);
}
Crane::Crane(){}
Crane::~Crane(){}

void Crane::print()
{
cout << "Crane Id: " << craneId << endl;
cout << "Crane Status: " << craneStatus << endl;
cout << "Crane is free: " << free << endl;
if (ship = NULL) //this is the problem
{
cout << " " << endl;
}
else
{
ship.print();//i have another print method in the Ship class
}
}

我试过了

if (ship == NULL) 

但是我收到这个错误信息

Crane.cpp:18: error: no match for ‘operator==’ in ‘((Crane*)this)->Crane::ship == 0’

如何正确地做到这一点?

最佳答案

那是因为 ship 不是指向 Ship 的指针,即 Ship* 但它是 Ship对象本身;那么你不能将它转换为 0 这是...指针的空地址。

如果你想要一个指向 Ship 的指针,你应该这样做

Ship* ship = new Ship;
// Catch a std::bad_alloc exception if new fails

然后如果您获得指针作为函数参数,您可以测试它是否为 null:

void foo(Ship* ship_pointer)
{
if(ship_pointer == 0)
// Oops pointer is null...
else
// Guess it's OK and use it.
}

关于c++ - C++ 中的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3656204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com