演示代码
在文件A中:
class Queuetest{
...
queue<myclass>* mMyQueue = new queue<myclass>;
void addMyclass(myclass& myclassobject){
mMyQueue->push(myclassobject);
}
...
};
在文件 B 中:
...
Queuetest* mQueuetest = new Queuetest();
mQueuetest->addMyclass(new myclass(...));
...
所以编译告诉我:
对“myclass”类型的引用无法绑定(bind)到“myclass *”类型的右值
一些类似的案例告诉我原因:
The C++ standard does not allow the binding of an anonymous temporary to a reference, although some compilers allow it as an extension. (Binding to a const reference is allowed.)
但是没有办法告诉我怎么解决;
我想用一个队列来控制我的对象,并让对象像先进先出一样工作;添加新的,弹出最后一个,自动释放该对象的内存;
有什么好的方法吗?
最佳答案
至少使用const限定符
void addMyclass( const myclass& myclassobject){
mMyQueue->push(myclassobject);
}
或者像这样重载函数
void addMyclass(myclass&& myclassobject){
mMyQueue->push(myclassobject);
}
而不是
mQueuetest->addMyclass(new myclass(...));
使用
mQueuetest->addMyclass(myclass(...));
因为队列被声明为存储类型为 myclass
的对象,而不是指向对象的指针。
queue<myclass>* mMyQueue = ...
^^^^^^^
也不清楚您为什么使用指向 std::queue
的指针作为数据成员。
queue<myclass>* mMyQueue = new queue<myclass>;
像这样声明数据成员
queue<myclass> mMyQueue;
这是一个演示程序。
#include <iostream>
#include <queue>
struct myclass
{
};
class Queuetest
{
private:
std::queue<myclass> mMyQueue;
public:
void addMyclass( const myclass &myclassobject )
{
std::cout<< "void addMyclass( const myclass &myclassobject )\n";
mMyQueue.push(myclassobject);
}
void addMyclass( myclass &&myclassobject )
{
std::cout<< "void addMyclass( myclass &&myclassobject )\n";
mMyQueue.push(myclassobject);
}
};
int main()
{
Queuetest test;
test.addMyclass( myclass() );
myclass m;
test.addMyclass( m );
}
它的输出是
oid addMyclass( myclass &&myclassobject )
void addMyclass( const myclass &myclassobject )
关于c++ - 对类型 '' 的非常量左值引用无法绑定(bind)到类型 ' *' 的临时对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57511262/