【发布时间】:2019-03-10 10:37:34
【问题描述】:
我在我的 qt 项目 m 中包含了“Edge_collapse_recorder.h”,我想在折叠过程中打印一些值,但是当我取消注释 std::cout 行:
../CM2/edge_collapse_recorder.h:102:37: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘const halfedge_descriptor’ {aka ‘const CGAL::internal::CC_iterator<CGAL::Compact_container<CGAL::Dart<2, CGAL::CMap_linear_cell_complex_storage_1<2, 3, CGAL::Linear_cell_complex_traits<3, CGAL::Simple_cartesian<double> >, CGAL::Linear_cell_complex_bgl_min_items, std::allocator<int> >, CGAL::Void, CGAL::Boolean_tag<true> >, std::allocator<CGAL::Dart<2, CGAL::CMap_linear_cell_complex_storage_1<2, 3, CGAL::Linear_cell_complex_traits<3, CGAL::Simple_cartesian<double> >, CGAL::Linear_cell_complex_bgl_min_items, std::allocator<int> >, CGAL::Void, CGAL::Boolean_tag<true> > >, CGAL::Default, CGAL::Default>, false>’})
std::cout << "collapse edge " << profile.v0_v1() << " " << << profile.v0() << " " << profile.v1() << std::endl;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
我搜索了一下问题,发现必须重载
std::ostream& operator<<(std::ostream& os, const Edge_collapse_recorder& t) {
os << << "collapse edge " << t.v0_v1() << " " << << t.v0() << " " << t.v1();
return os;
}
但它显示以下错误: 此处不允许函数定义在‘{’令牌之前”
void OnCollapsing(Profile const& profile
,boost::optional<Point_3> placement
)
{
visitor.OnCollapsing(profile,placement);
if ( placement ){
std::ostream& operator<<(std::ostream& os, const Edge_collapse_recorder& t) {
os << << "collapse edge " << t.v0_v1() << " " << << t.v0() << " " << t.v1();
return os;
}
Record record;
record.v0 = profile.v0();
record.v1 = profile.v1();
record.p0 = profile.p0();
record.p1 = profile.p1();
halfedge_descriptor hd = profile.v0_v1();
record.oppa = (! is_border(hd,recorder.sm))
? target(next(hd, recorder.sm),recorder.sm)
: boost::graph_traits<LCC>::null_vertex();
record.oppb = (! is_border(opposite(hd, recorder.sm),recorder.sm))
? target(next(opposite(hd, recorder.sm), recorder.sm),recorder.sm)
: boost::graph_traits<LCC>::null_vertex();
recorder.records.push_back(record);
}
}
【问题讨论】:
-
首先,不要将代码发布为图片。代码是文本,复制粘贴。否则就是阻碍搜索能力并使视障者的事情变得更加困难。其次,图像包含几个语义和句法问题,表明您可能需要good book about C++。
-
函数不能在其他函数的主体中定义。但这正是违规行试图做的——在
OnCollapsing()的主体中定义而不是调用名为operator<<()的函数。 -
@Peter 好的,我明白你的意思,但是我如何使用 cout
-
cout << value_you_want_output。是什么让你觉得在OnCollapsing()中使用“cout OnCollapsing() 添加了一些文本 - 为什么使用该特定文本? -
@Peter 你是对的,我现在尝试了 cout' 和 'const halfedge_descriptor' 我更新了打印 profile.v0() 时显示错误的帖子