c++中的类型转换和引用

typecasting and reference in c++

本文关键字:引用 类型转换 c++      更新时间:2023-10-16

请看下面的调用和相应的函数,

long pagenumber = 0;
Node *newNode = createNode();
bufMgr->writePage(pageNumber,(char*)newNode);

和writePage的声明如下

writePage(long &pageNumber,char* &node)

writePage接受一个长引用和一个char*引用。上面的代码无法编译,它显示了以下错误

no matching function for call to ‘SampleBufferManager::writePage(long int&, char*)’
SampleBufferManager.h:28: note: candidates are: bool SampleBufferManager::writePage(long int&, char*&)
谁能帮我一下,如何处理这个…类型转换正在解决问题,如果我按以下方式执行,代码将编译:
long pagenumber = 0;
Node *newNode = createNode();
char *test = (char*)newNode;
bufMgr->writePage(pageNumber,test);

如何解决这个问题??

您不能将引用传递给临时右值(感谢curousguy)。你需要创建一个变量并传递它:

char* c = (char*)newNode;
bufMgr->writePage(pageNumber, c);

不能将非const引用绑定到临时对象。(char *)newNode的结果是一个临时的(它没有名字)。

可以将const引用绑定到临时对象。因此,将您的函数重新声明为writePage(long &pageNumber, char* const &node)将有效。

writePage做什么?你也能控制那个功能吗?将第二个参数重新声明为const可能会有帮助,如果它不写这个地址的话。如果是这样(它的名字暗示了这一点),那么在其中使用Node*可能是合理的,即将其声明为

writePage(long &pageNumber, Node* &node)

毕竟,您不希望您的Node指针newNode指向根本不是Node实例的东西,因为它已被任意char覆盖。你呢?