编译错误:无效使用了void表达式
Compilation error: invalid use of void expression
我有一个函数,它将从队列中弹出任务代码,并在任务代码和任务(方法)的映射中进行搜索,然后将匹配的任务推送到另一个队列中,我希望稍后弹出并按顺序执行。以下是功能:
void CertManMgmtEECertController::PrepareTask()
{
while(_taskCodeQueue.empty())
{
_taskQueue.push((_taskStore.find(_taskCodeQueue.pop()))->second);
}
}
下面是定义该函数类的标题:
class CertManMgmtEECertController : public virtual CertManMgmtCertificate
{
public:
CertManMgmtEECertController();
~CertManMgmtEECertController();
void PerformTask();
void SetTask(CertManMgmtEETaskCode taskCode);
typedef void (CertManMgmtEECertController::*Task)();
private:
CertManMgmtEETaskCode _task;
queue<Task> _taskQueue;
queue<CertManMgmtEETaskCode> _taskCodeQueue;
map<CertManMgmtEETaskCode,Task> _taskStore;
void LoadTasks();
void PrepareTask();
void ExecuteTaskQueue();
void GetEECert();
bool GetCertificate();
};
但我在编译时得到了以下错误:
CertManMgmtDomainController.h:49: error: 'CertManMgmtEECertController' does not name a type
CertManMgmtEECertController.cpp: In member function 'void certman::CertManMgmtEECertController::PrepareTask()':
CertManMgmtEECertController.cpp:42: error: invalid use of void expression
CertManMgmtEECertController.cpp: In member function 'void certman::CertManMgmtEECertController::ExecuteTaskQueue()':
CertManMgmtEECertController.cpp:55: error: void value not ignored as it ought to be
我哪里错了?我知道这里还有其他编译错误。请帮忙。
原则上,问题包含足够的信息来回答invalid use of void expression
错误。
std::queue::pop()返回void
。你想要的PrepareTask
可能是
while (!_taskCodeQueue.empty()) {
// ^^^ also fixed condition
_taskQueue.push((_taskStore.find(_taskCodeQueue.front()))->second);
_taskCodeQueue.pop();
}
一个好的经验法则是从第一条错误消息开始。
在你的情况下,这是
CertManMgmtDomainController.h:49: error: 'CertManMgmtEECertController' does not name a type
可能您有拼写错误,可能头没有包含在实现文件中,可能标识符被重新定义为函数,等等。但从这个开始。忽略其余的错误:它们很可能是第一个错误导致的。
编辑:写完上面的内容后,我在另一个答案中看到您使用的是std::queue
,实际上,它的pop
方法返回void
。这是为了例外安全。没有将CCD_ 7和CCD_。
关于打字错误的可能性,请注意
-
Visual Studio等现代IDE提供有关标识符和的工具提示
-
C++提供命名空间,以更实用的方式处理常见前缀。
查看在typedef
中添加namespace
是否有帮助。
typedef void (certman::CertManMgmtEECertController::*Task)();
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- (C++)分析树以计算返回错误值的简单算术表达式
- void() 是一个有效的C++表达式吗?
- 为什么新表达式可以正确生成指针类型,即使它应该返回 void*?
- 在c++std::函数的上下文中无效使用void表达式
- 无效地将 void 表达式与队列和 .pop() 一起使用
- 代数树表达式C++错误:未解析的外部符号"Public:_thiscall AlgebraicTreeExpression::~AlgebraicTreeExpression(void) ..."
- 使用多线程处理对象数组 - 无效使用 void 表达式错误
- 您可以在表达式中使用 void 返回函数吗?
- C STD ::线程无效的void表达式使用
- static_casting constexpr void* 的结果是常量表达式吗?
- 错误:无效使用了void表达式C++
- LAMBDA 错误:类型 'void' 的条件表达式是非法的
- lambda表达式中出现无效的使用Void表达式错误
- 错误:在类方法声明中无效地使用void表达式
- c++ 14是否要求delete表达式必须调用' void operator::delete(void*, std::
- 无法在VS 14 CTP中使用auto声明lambda:类型为'void'的条件表达式是非法的
- 无效地将void表达式与线程和对象一起使用
- 编译错误:无效使用了void表达式
- 可变模板:无效使用void表达式