如果我想从成员函数返回一个指针,我首先想到的语法应如下所示:
char SecondClass:: *getName() {
return this->name;
}
但我在Eclipse中收到一条错误消息,表示它无法解决该字段" name"。不知怎的,它在这种情况下变得隐藏起来。
正确的解决方案是
char *SecondClass:: getName() {
return this->name;
}
这是在类名前加*而不是函数名。
所以我的问题是:为什么第一个函数不起作用,这些从成员函数返回指针的实现有什么区别?
答案 0 :(得分:7)
这与指针无关。该方法称为SecondClass::getName()
,它返回一个char *。所以你可以写
char* SecondClass::getName()
或
char *SecondClass::getName()
但是你不能把*放在类名和方法名之间。
答案 1 :(得分:1)
char SecondClass:: *getName()
与char *SecondClass:: getName()
的功能完全不同。
第一个不是SecondClass
或任何其他类的成员函数,因此您无法在其中引用this
。它恰好返回一种称为指向成员的指针的特殊指针。它的类型拼写为char SecondClass:: *
,它是指向类char
中类型为SecondClass
的成员的指针。你可能还不想知道这些。
你想要的ssyntax是 return-type function-name parameter-list 。您希望定义一个名为SecondClass::getName
的函数,该函数返回char *
并且不带参数,因此char *SecondClass::getName()
。
答案 2 :(得分:0)
在c ++中,成员函数的签名是 [returnType] [ClassName] :: functionName {}
star是返回类型的一部分,它是char *或指向char的指针。你声明一个函数的第一种方法是无效的c ++。