1

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

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);

问题怎么解决??

4

3 回答 3

3

您不能传递对临时右值的引用(感谢奇怪的家伙)。您必须创建一个变量并传递它:

char* c = (char*)newNode;
bufMgr->writePage(pageNumber, c);
于 2011-12-14T21:57:55.973 回答
2

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

但是,您可以将const引用绑定到临时对象。所以重新声明你的函数writePage(long &pageNumber, char* const &node)会起作用。

于 2011-12-14T21:57:14.250 回答
1

做什么writePage?您是否也在控制该功能?const如果第二个参数不写入此地址,则重新声明第二个参数可能会有所帮助。如果确实如此——它的名字暗示了这一点——Node*无论如何使用它可能是合理的,即将它声明为

writePage(long &pageNumber, Node* &node)

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

于 2011-12-14T22:06:51.873 回答