解除引用的指针不能用作它指向的对象?

时间:2014-09-29 16:17:10

标签: c++ string pointers dereference

我问这个是因为我在编译时出现了编译错误:

*string3.find('h');

我得到的错误是

error: request for member 'find' in 'string3', which is of pointer type 'std::string* {aka std::basic_string<char>*}' (maybe you meant to use '->' ?)

我认为这样可行,因为* string3是一个字符串,*运算符取消引用指针,以便我正在处理实际的字符串。在C ++中,类函数一般不能以这种方式工作吗?

注意:我知道我可能不需要指针。这只是我教授关于此片段的作业规范之一。

2 个答案:

答案 0 :(得分:5)

使用:

string3->find('h');

OR

(*string3).find('h');

.优先于*

higher

答案 1 :(得分:4)

你应该看看C ++ operator precedence

std::string string2 = "hello";
std::string* string3 = &string2;
(*string3).find('h');

需要额外的括号对的原因是因为“元素选择参考”(即你的.字符)与“间接”相比具有更高的优先级(取消引用)“(即你的*字符)。

正如您的编译器提示的那样,这也可以起作用:

string3->find('h');

作为一个小的调试帮助:您收到的错误消息说明了您需要知道的解决问题的方法

  

错误:请求'string3'中的成员'find',这是指针   输入'std :: string * [...]

即。 “你在指针对象上请求成员'find',我该怎么解释这个?这对我来说不合适