1

これを実行したいのですが、ツリーの親を取得し、ノードを合計して結果を親に入れたいのですが、これはマルチスレッドです。キューを使用して、合計できるノードを見つめています。

私が直面している問題はこれです

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);

        }
     }
        }

トリプレットクラスはこんな感じ

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;
  }
};

だから私がしたいのは、実際のオブジェクトをキューに保存して変更することであり、そのコピーを作成しないことです。ありがとう

4

1 に答える 1

1

tripletあなたのfind_triplets関数にはTripletsインスタンスがあるようです。したがって、コンパイラはその行を、operator()これら 4 つの引数を使用してその関数を呼び出そうとする試みとして解釈しますが、Tripletsクラスにはそのような演算子がないため、上記のエラー メッセージが表示されます。

Triplets別の変数 ( という名前)を宣言するか、の代わりにtriplet呼び出すことを意図していた可能性があります。triplet.form_triplettriplet.operator()

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);
于 2012-06-18T12:56:03.410 に答える