c++ - 对类型 '' 的非常量左值引用无法绑定(bind)到类型 ' *' 的临时对象

标签 c++ class reference queue constants

演示代码

在文件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/

相关文章:

c++ - 同步 QThreads 时出现问题

objective-c - 在 Objective-C 中,如何使用 object_setIvar 设置原始值?

python - 从Python函数内部访问全局变量

java - 在 "for each"java中获取引用

c# - 将实例设置为 null 而不是引用它的变量

Java,类成员或方法局部变量 : which one is better for performance?

c++ - 试图将 vector 的内容传递给线程

c++ - 向mfc对话框控件添加变量

c++ - C++ 中的大矩阵创建

wcf - 控制使用 svcutil.exe 生成的 wcf 代理类名