我是C ++的初学者,这是一个非常基本的语法问题,但我似乎无法在其他地方找到答案。任何意见都欢迎。这是问题的简化版本。
说我有一个班级'对'
class pair
{
int a;
int b;
public:
pair(int x,int y)
{
a=x;
b=y;
}
int lookup()
{
return this->a+b;
}
};
然后我实例化并将该实例复制到堆上的某个位置。
int func()
{
...
pair test(1,2);
pair *ptr=new pair;
*ptr=test;
}
现在这是关键。在函数结束后我不会破坏这个内存分配。我想稍后在其他功能中使用它。问题是,我更喜欢将它保存在堆中而不必将其复制到堆栈中(在实际程序中它非常大)。因此,我想做这样的事情:
int otherfunc()
{
...
int sum=*ptr.lookup;
}
但是我收到编译错误。我最终不得不这样做:
int otherfunc()
{
...
point temp=*ptr;
int sum=temp.lookup;
}
虽然这有效,但它是多余的,当处理非常大的事情时,它甚至可能导致溢出。任何人都知道使用指针调用方法同时将其保留在堆上的语法?感谢。
答案 0 :(得分:4)
我相信这就是你要做的事情:
int sum = ptr->lookup();
除此之外,还有:
return this->a+b;
这可能会更好:
return a+b;
答案 1 :(得分:1)
表达式*ptr.lookup
将被解释为*(ptr.lookup)
,这就是为什么您会收到语法错误,因为ptr.lookup
没有意义。您需要首先使用括号ptr
告诉编译器解除引用(*ptr).lookup
。
因为指针在C(和C ++)中很常见,(*a).b
可以用更简单的形式编写:a->b
。
此外,lookup
即使不采用任何参数也是一个功能。您需要使用()
:
int sum=ptr->lookup();