据我了解,当没有完整的类型规范的前向声明时会发生不完整的类型错误,然后实例化该类型,因为编译器无法判断这种类型的大小。就我而言,我不明白这段代码是如何产生这样的问题的。为简单起见,我删除了不相关的部分。
class FilterOnNode {
struct PartialResult { int n1,n2; long e; };
typedef PartialResult* InputResult;
typedef tbb::flow::multifunction_node<InputResult, InputResult> FilterNodeType;
void BuildGraph(tbb::flow::graph &g, tbb::flow::graph_node &src) {
auto sampleNode = FilterNodeType(
g,
tbb::flow::concurrency::unlimited,
[&](const InputResult &input, typename FilterNodeType::output_ports_type &op) { //error points to here
//some logic here... might not send message.
std::get<0>(op).try_put(input);
});
tbb::flow::make_edge(src, sampleNode);
//create couple other nodes like previous then connect edges
tbb::flow::make_edge(tbb::flow::output_port<0>(sampleNode), otherNode);
}
编译器在 lambda 表达式处给出不完整类型的错误。确切的错误说:
/usr/local/include/tbb/flow_graph.h:1568:7: error: incomplete type ‘std::tuple_size<FilterOnNode::PartialResult*>’ used in nested name specifier class multifunction_node
PartialResult 类型不是已经完全指定了吗?试着把它从课堂上拿出来,但仍然是同样的问题。