在c++中将模板作为实参传递给函数



我想创建一个基于参数(动作)排序的结构(类别)队列。为此,我使用std::priority_queue (pQueue)模板。当我构建代码时,我得到以下错误:

  1. error: redefinition of ‘pQueue::pQueue()’→使用#pragma once避免包含多个头文件,仍然得到这个错误。
  2. error: use of deleted function ‘pQueue::pQueue(constpQueue&)’ note: ‘pQueue::pQueue(const pQueue&)’ is implicitly deleted because the default definition would be ill-formed:→如何定义可以包含如下代码所示信息的自定义构造函数?
  3. error: ‘q’ was not declared in this scope(scope: queueWork in file.cpp)我在哪里申报"q"?

如何解决这些错误?

主要目的是在function()多次执行时将数据排队,然后再使用该数据。下面的代码片段是一个更大项目的一部分。因此,可能会错过一些细节。

file.cpp

#include "File.h"
using namespace std;
pQueue::pQueue()
{
std::priority_queue<std::pair<int, Category*>> q;
}
pQueue::~pQueue()
{
}
void queueWork(std::priority_queue<std::pair<int, Category*>> q, int action, Category* data)
{
q.emplace(make_pair(action, data));
}
void doWork(std::priority_queue<std::pair<int, Category*>> q, bool flag)
{
while (true)
{
std::pair<int, Category*> queueElement;
queueElement = q.top();
Category* data = queueElement.second;
// Perform some operation, get return value
q.pop();
}
}

file.h

#pragma once
#include <queue>
#include <thread>
class pQueue
{
public:
pQueue() {
}
~pQueue() {
}
void queueWork(std::priority_queue<std::pair<int, Category*>> q, int action, Category* data);
private:
void doWork(std::priority_queue<std::pair<int, Category*>> q, bool flag);
};

main.cpp

#include "File.h"
bool function(Category* data)
{
bool result;
if (data)
{
// Will set action values later
auto action = 1;
pQueue::queueWork(Queue, action, data);
// TODO: Implement getResult function to get the return value
// result = pQueue.getResult()
}
return true;
}

在您的file.h中,您不仅要声明构造函数,而且还要定义它:

class pQueue
{
public:
pQueue() {
flag = false;
}
接下来,在file.c文件中重新声明构造函数:
pQueue::pQueue()
{
std::priority_queue<std::pair<int, Category*>> q;
}

那不可能。c++有一个定义规则。这里只能有一个定义

相关内容

  • 没有找到相关文章