表达式必须具有类类型
我已经有一段时间没有用 C++ 编写代码了,当我尝试编译这个简单的代码片段时,我陷入了困境:
class A
{
public:
void f() {}
};
int main()
{
{
A a;
a.f(); // works fine
}
{
A *a = new A();
a.f(); // this doesn't
}
}
I have't coded in c++ for some time and I got stuck when I tried to compile this simple snippet:
class A
{
public:
void f() {}
};
int main()
{
{
A a;
a.f(); // works fine
}
{
A *a = new A();
a.f(); // this doesn't
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
它是一个指针,所以请尝试:
基本上运算符
.
(用于访问对象的字段和方法)用于对象和引用,因此:如果您有指针类型,则必须取消引用它首先获取引用:
a->b
表示法通常只是(*a).b
的简写。关于智能指针的注释
运算符
->
可以重载,尤其是智能指针使用的运算符。当您使用智能指针,那么您还可以使用->
运算符来引用指向的对象:It's a pointer, so instead try:
Basically the operator
.
(used to access an object's fields and methods) is used on objects and references, so:If you have a pointer type, you have to dereference it first to obtain a reference:
The
a->b
notation is usually just a shorthand for(*a).b
.A note on smart pointers
The operator
->
can be overloaded, which is notably used by smart pointers. When you're using smart pointers, then you also use the->
operator to refer to the pointed object:允许分析。
作为一般建议:
根据经验:如果您需要自己管理内存,通常已经有一个高级管理器或替代方案可用,它遵循 RAII 原则。
Allow an analysis.
As a general advice:
As a rule of thumb: If you need to manage memory on your own, there is generally a superiour manager or alternative available already, one that follows the RAII principle.
摘要:而不是
af();
应该是a->f();
在 main 中,您定义了 a< /strong> 作为指向 A 的对象的指针,因此您可以使用
->
运算符访问函数。替代,但可读性较差的方式是
(*a).f()
af()
可以用于访问 f(),如果 a 声明为:一个a;
Summary: Instead of
a.f();
it should bea->f();
In main you have defined a as a pointer to object of A, so you can access functions using the
->
operator.An alternate, but less readable way is
(*a).f()
a.f()
could have been used to access f(), if a was declared as:A a;
a
是一个指针。您需要使用->
,而不是。
a
is a pointer. You need to use->
, not.