我正在尝试检查 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/