请查看以下电话和相应的功能
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);
问题怎么解决?
答案 0 :(得分:3)
您无法将引用传递给临时 rvalue(感谢curiousguy)。你必须创建一个变量并传递它:
char* c = (char*)newNode;
bufMgr->writePage(pageNumber, c);
答案 1 :(得分:2)
您无法将非const
引用绑定到临时引用。 (char *)newNode
的结果是临时的(它没有名称)。
但是,您可以将const
引用绑定到临时引用。因此,将您的函数重新声明为writePage(long &pageNumber, char* const &node)
将起作用。
答案 2 :(得分:1)
writePage
做什么?你是否也掌控了这个功能?如果第二个参数没有写入此地址,则将第二个参数重新声明为const
可能会有所帮助。如果它确实 - 它的名字暗示某种方式 - 无论如何在其中使用Node*
可能是合理的,即声明为
writePage(long &pageNumber, Node* &node)
毕竟,您不希望您的Node
指针newNode
完全指向不是Node
实例的内容,因为它被任意{char
覆盖1}}秒。你呢?