【发布时间】:2017-02-14 09:17:02
【问题描述】:
我有以下基类和继承类:
// Abstract base class Manager.
class Manager
{
public:
Manager(Task*& _task);
protected:
// Reference of a pointer to the current task.
Task*& task;
};
// Abstract base class Task.
class Task
{
virtual task_rcodes_t run() = 0;
protected:
uint8_t task_id;
};
// Still abstract class Special_Task.
class Special_Task : public Task
{
public:
Special_Task();
};
// Class Special_Manager.
class Special_Manager : public Manager
{
public:
Special_Manager();
protected:
// Pointer to the current special task.
Special_Task* task;
};
这个想法是让任务指针为0,以检测当前没有任务在运行。为了共同访问 Task 和 Special_Task 指针,它们通过指针引用传递。
为什么我会收到错误消息: “从 'Special_Task*' 类型的右值对类型 'Task&' 的非常量引用的初始化无效” 结合: “无法解析符号‘经理’”
对于 Special_Manager 的构造函数:
// Constructor Manager
Manager::Manager(Task*& _task) : task (_task)
{}
// Constructor Special_Manager
Special_Manager::Special_Manager() : Manager(task), task (0)
{}
既然 Special_Task* 任务是一个普通的(指针)变量,我不明白为什么它被认为是一个右值?
谢谢!
【问题讨论】:
-
因为它不是左值,因为你不能分配给引用。
-
类
Special_Manager();里面的Manager_Special是什么??? -
那是构造函数。我更正了类名中的输入错误。
-
在这种情况下,您没有理由不能生成正确的minimal reproducible example。为什么不删除与问题无关的部分代码?您是否尝试将其减少到最小的测试用例?
-
合适的 MCVE 示例:godbolt.org/g/YVxyKH - 看看如何编译它以给出(或多或少)您所询问的错误?我很想知道您是如何得到您声称的确切错误的。
标签: c++ pointers pass-by-reference rvalue