提问人:Mateus Lima Silveira 提问时间:5/20/2022 更新时间:5/20/2022 访问量:269
在 C++ 中将常规类指定为 null
Assigning general classes as null in C++
问:
我在将程序从 C# 调整为 C++ 时遇到了麻烦。给定一个类为其分配 null 值是非常通用的。但是 C++ 不接受等效形式“nullptr”
class Point{
public:
int x,y;
}
//...
Point p = nullptr;
有什么办法可以解决吗?
答:
1赞
user12002570
5/20/2022
#1
问题是在您的示例中是非指针类型。这意味着它不能使用 .的类型是 。p
nullptr
p
Point
您可以创建一个指向 a 的指针,以便可以使用 a 对其进行初始化,如下所示:p
Point
nullptr
Point *p = nullptr; //p is a pointer to non-const Point object
或
如果要创建类类型的对象,则一种方法如下:Point
Point p{1, 3};
我还建议参考一本好的 C++ 书籍,以便更好地理解这个概念。
评论
0赞
Mateus Lima Silveira
5/20/2022
是的,我不确定,因为在 c# 中它可以工作,谢谢
1赞
Nitin Malapally
5/20/2022
#2
不能赋值给类,因为类是类型而不是变量。键入的内容是要求编译器找到一个接受 .nullptr
Point p = nullptr;
Point
nullptr
您可以通过以下方式创建对象作为自动变量:Point
Point p = Point{1, 2}; // sets x = 2 and y = 3
或者干脆这样:
Point p;
但是,为此,您需要定义一个初始化的构造函数,并且由于您尚未为成员变量提供默认值。x
y
根据此语句所在的上下文,将在堆或堆栈上分配。如果你在 main 函数中实例化,它将是后者。p
p
您可以通过这样做来创建指向对象的指针:Point
Point* p = nullptr;
但是,您只会创建一个指针。您将需要进一步处理分配,您可以这样做:
Point* p = new Point{1, 2};
在这种情况下,您还应该在程序结束之前释放分配的内存,如下所示:
delete p;
评论
0赞
Mateus Lima Silveira
5/20/2022
我结束了对类的指针并修改了所有方法
0赞
πάντα ῥεῖ
5/20/2022
@mateus这是最糟糕的解决方案。
评论
p
不是示例中的指针。请使用(参考)一本好的 C++ 书Point* p = nullptr;