C++ 为什么我会得到;“呼叫不匹配”;关于这个密码?

C++ 为什么我会得到;“呼叫不匹配”;关于这个密码?,c++,C++,让我们看看,我想这样做,我想得到一棵树的父节点,然后对节点求和,将结果放入父节点,这是多线程的。我使用一个队列来监视a可以是和的节点,等等 我面临的问题是 error: no match for call to ‘(Triplets) (int&, int&, bool&, NodeT*&)’ 代码是从这里来的吗 void find_triplets(NodeT *ptrRoot) { if (ptrRoot != NULL) { find

让我们看看,我想这样做,我想得到一棵树的父节点,然后对节点求和,将结果放入父节点,这是多线程的。我使用一个队列来监视a可以是和的节点,等等

我面临的问题是

error: no match for call to ‘(Triplets) (int&, int&, bool&, NodeT*&)’
代码是从这里来的吗

void find_triplets(NodeT *ptrRoot)
{
   if (ptrRoot != NULL)
    {
    find_triplets(ptrRoot->left);
    find_triplets(ptrRoot->right);

    cout << "find triplets and save them to the queue" << endl;
        cout << " we hit a hot spot is null the root, nothing to see here move along boys" << endl;

     if(ptrRoot->left != NULL && ptrRoot->right != NULL)
        {

        if (ptrRoot->left->done == true && ptrRoot->right->done == true)
        {
        cout << "we got one of 2 sons true so do something, this are the sons "
 << ptrRoot->left->key_value << " " << ptrRoot->right->key_value << endl;         

        cout << "sum them and put it in the father and set it to true " << endl;
        ptrRoot->key_value = ptrRoot->left->key_value + ptrRoot->right->key_value;
        ptrRoot->done = true;
        cout << "thread queue " << endl;
       triplet(ptrRoot->left->key_value, ptrRoot->right->key_value, ptrRoot->done, ptrRoot);
        qThreads.push(triplet);

        }
     }
        }

因此,我要做的是将实际对象存储在队列中以修改它,而不复制它。谢谢

您的
查找三元组
函数中的
三元组
似乎是一个
三元组
实例。因此,编译器将该行解释为试图使用这四个参数调用其
operator()
函数,但您的
Triplets
类没有此类运算符,因此您会收到上面报告的错误消息

您可能想声明另一个
triplet
变量(名为
triplet
),或者调用
triplet.form\u triplet
,而不是
triplet.operator()


您的
find_triplets
函数中的
triplets
似乎是一个
triplets
实例。因此,编译器将该行解释为试图使用这四个参数调用其
operator()
函数,但您的
Triplets
类没有此类运算符,因此您会收到上面报告的错误消息

您可能想声明另一个
triplet
变量(名为
triplet
),或者调用
triplet.form\u triplet
,而不是
triplet.operator()


>三元组(ptroot->left->key_value,ptroot->right->key_value,ptroot->done,ptroot);--这是什么?是的,这似乎是一个愚蠢的错误,它是三胞胎而不是三胞胎,好吧,我修正了它,所以现在的问题是,我如何给它一个节点,以改变不复制请在单独的帖子中提出新的问题。这个问题是关于编译器错误的,您已经得到了答案。在新问题中,请确保描述与当前行为相关的程序所需行为。>三元组(ptroot->left->key_value,ptroot->right->key_value,ptroot->done,ptroot);--这是什么?是的,这似乎是一个愚蠢的错误,它是三胞胎而不是三胞胎,好吧,我修正了它,所以现在的问题是,我如何给它一个节点,以改变不复制请在单独的帖子中提出新的问题。这个问题是关于编译器错误的,您已经得到了答案。在你的新问题中,请确保描述你的程序与其当前行为相关的预期行为。是的,具有这些参数的构造函数在triplets类中。我知道,@User。这就是为什么我建议构造函数就是你想要调用的。在创建新实例时调用构造函数,而不是在别处已声明一个实例时。如我在第一行代码中所示,如果希望将某些内容解释为声明,则需要包含类型名。是的,triplets类中有带这些参数的构造函数。我知道,@User。这就是为什么我建议构造函数就是你想要调用的。在创建新实例时调用构造函数,而不是在别处已声明一个实例时。如我在第一行代码中所示,如果希望将某些内容解释为声明,则需要包含类型名。
class Triplets
{
public:
  int nVal1;
  int nVal2;
  NodeT *ptrNode;
  bool bUpdate;

  Triplets()
  {
    nVal2 = 0;
    nVal1 = 0;
    bUpdate = false;
    ptrNode = NULL;
  }

  ~Triplets()
  {
    delete ptrNode;
  }

  Triplets(int nVal1, int nVal2, bool bUpdate, NodeT *ptrNode)
  {
    this->nVal2 = nVal2;
    this->nVal1 = nVal1;
    this->bUpdate = bUpdate;
    this->ptrNode = ptrNode;
  }

  void form_triplet(int nval1, int nVal2, bool bUpdate, NodeT *ptrNode)
  {
    this->nVal2 = nVal2;
    this->nVal1 = nVal1;
    this->bUpdate = bUpdate;
    this->ptrNode = ptrNode;
  }
};
Triplets triplet(ptrRoot->left->key_value, ptrRoot->right->key_value, ptrRoot->done, ptrRoot);
// or
triplet.form_triplet(ptrRoot->left->key_value, ptrRoot->right->key_value, ptrRoot->done, ptrRoot);