2017-01-01 1 views
0

Le code C++ suivant est pour Intel TBB. Ce code a également été généré par le diagramme de flux. J'ai 2 erreurs de compilation:Erreur multithreading TBB C++: aucune fonction correspondante pour l'appel

No matching function for call to 'make_edge' 
No matching function for call to 'make_edge' 

Voici le code avec les définitions:

function_node< tbb::flow::tuple<char *,char *>, char * > result_reporter(position3_g0, 1, [](const tbb::flow::tuple<char *,char *> & in) -> char * {... 

function_node< char *, char * > sott_target_node(position3_g0, unlimited, [](char *buffer) -> char * { 

Voici le code d'appel TBB qui crée les erreurs de compilation

make_edge(result_join, result_reporter); 

make_edge(sott_target_node, input_port<2>(result_join)); 

Je fournirais Glady tous le code mais StackOverflow empêche trop de code avec peu de description. Quelqu'un peut-il aider à comprendre ces erreurs? Merci

Répondre

2

Vous essayez d'utiliser l'entrée de la fonction_noeud de façon incorrecte. Un nœud_fonction avec une entrée de tuple<char *, char *> prend un prédécesseur avec une sortie tuple<char *, char *>.

Si c'est ce que vous voulez (qu'il y ait deux entrées au noeud chacun de type char *, et une sortie de char *), vous devez utiliser une combinaison d'un indexer_node (qui a plusieurs ports d'entrée et une entrée sur une port provoquera l'émission d'un message avec le numéro de port et l'entrée enveloppée) qui se connecte à un function_node qui prend le type de sortie du indexer_node. Veuillez consulter la documentation et demander si vous avez des questions.

+0

Si vous souhaitez que le noeud ne soit déclenché que lorsqu'il reçoit une sortie de tous ses prédécesseurs, vous avez besoin d'un noeud de connexion. https://software.intel.com/en-us/node/506236. Il y a trois politiques d'adhésion; Je suppose que vous voulez une jointure de file d'attente. L'indexer_node transmet immédiatement chaque message qu'il reçoit de chaque port; la jointure attend jusqu'à ce qu'elle ait au moins une entrée sur chaque port d'entrée avant de les transmettre. La sortie de la jointure est un tuple. – cahuson