c++中的类型转换和引用
typecasting and reference in c++
请看下面的调用和相应的函数,
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
覆盖。你呢?
相关文章:
- 强制转换为引用类型
- 通过引用传递参数时C++类型转换
- 隐式可转换参数,但属于引用类型
- 强制转换为不相关的引用类型是否违反严格的别名规则?
- C++ 类型转换基础 PTR 到派生 PTR 保存在引用类中
- 自定义类型转换运算符在转发引用上调用时不起作用(当对象按值传递时有效)
- 有没有一种方法可以将左值和右值的列表分别转换为具有引用类型和完整类型的元组
- 如何将引用类型转换为值类型
- 将运算符类型转换为除某些引用之外的任何算术类型
- 引用 void* 的隐式类型转换
- Temporary在首先被强制转换为引用类型时仍然绑定到引用
- 对引用进行类型转换
- 取消引用类型punned指针将打破严格的混叠规则:将字节数组转换为数字
- 将char[]强制转换为usingned int给出:取消引用类型的punned指针将打破严格的别名规则
- c++中的类型转换和引用
- C#中引用类型的内存方面的显式强制转换解释
- 引用类型转换中的c++虚函数
- 与强制类型转换指针相比,在dynamic_cast中使用强制类型转换引用
- 为什么将类型转换为指针然后解引用可以工作?
- 带和不带引用的指针类型转换