我是计算机科学的学生。在提出答案之前,请完整阅读我的问题!对象解引用指针的指针?
早上好堆栈溢出!今天我有一个关于解析引用传入函数时类型为object的指针的指针的问题。
我有书的指针数组和书籍指针的指针数组:
Book* pBookArray[5];
Book** sortedPointerArray[5]; // Where sortedPointerArray[k] = &pBookArray[k]
我有原型和调用的函数:
void sortBooksPointer(Book** sortArray[], int size, int mode)
sortBooksPointer(sortedPointerArray, 5, 0);
在这个函数中,我执行一个泡沫排序的书籍或作者的标题。排序算法正常工作,不是这个问题的主题。当第一次写的功能,我试图做类似的下面,也没有成功:
string tempTitleA = **sortArray[k]->getTitle(); //Or Author depending on mode
在书类,我已经定义了一个朋友的ostream它允许使用cout
直接输出。我决定做一些测试,看看也许双解引用是不正确抽丝一本书的对象与下面的代码行:
if (verbose)
{
cout << "Address of sortedBooks[0]: " << sortArray[0] << endl; // Address of pointer to book pointer
cout << "Dereference of sortedBooks[0]: " << *sortArray[0] << endl; // Address of the book pointer pointed to by sortedBooks[0]
cout << "Double deference of sortedBooks[0]:\n" << **sortArray[0] << endl; // Book pointed to by the pointer which sortedBooks[0] points to
}
成功地执行。
我花了整整一天的时间试图弄清楚为什么我可以使用超载的operator<<
输出,但在最终放弃并提出黑客攻击之前无法分配tempTitleA = **sortArray[k]->getTitle();
。而不是试图访问的**sortArray[k]
的的getTitle()函数,我现在这样做:
Book tempBookA == **sortArray[k];
tempTitleA = tempBookA.getTitle();
哪个正确工程100%。
现在的问题是这样的: 为什么双反引用正确分配一本书tempBookA,但不允许那本书的公共职能直接访问?
预先感谢您的时间和知识。
我在我的代码中试过这个,我收到下面的错误: 本书没有重载操作符 - >''和''左操作数有类类型''。所以我用''tempTitleA =(** sortArray [k] .getTitle();''替换了它,并且这产生了正确的响应。为什么会出现这种情况? 这会不同于类似...' '(* sortArray [k] - > getTitle();''? –
你是对的,第一个*得到了一个指向Book的指针(指针指针),第二个得到了Book实例。你也可以完成(* sortArray [k]) - > getTitle();没有括号, - >或。运算符比*运算符具有更高的优先级,因此相当于*(sortArray [k] - > getTitle ())会产生类似于您遇到的第一个错误。 –