определение функции здесь не разрешено до маркера ‘{’ - PullRequest
0 голосов
/ 10 марта 2019

Я включил « Edge_collapse_recorder.h » в свой проект qt, и я хочу напечатать некоторые значения в процессе свертывания, но он показывает следующую ошибку, когда я раскомментировал std :: cout << »край сгиба "<< profile.v0_v1 () <<" "<< << profile.v0 () <<" "<< profile.v1 () << std :: endl; </strong> строка:

../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;
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~

Я искал проблему и обнаружил, что должен перегрузить оператор <<, затем добавил следующее к методу onCollapssing: </p>

 std::ostream& operator<<(std::ostream& os, const Edge_collapse_recorder& t) {
                      os <<  << "collapse edge " << t.v0_v1() << " " << << t.v0()  << " " << t.v1();
                     return os;
                 }

, но он показывает следующую ошибку: определение функцииздесь нельзя использовать до '{' token "

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

1 Ответ

3 голосов
/ 10 марта 2019

Эта закомментированная строка никогда не скомпилируется. Имеет два последовательных оператора <<.

Что касается сообщения об ошибке, вы определяете функцию

std::ostream& operator<<(std::ostream& os, const Edge_collapse_recorder& t)

(а не просто объявить это) внутри другой функции. Определения вложенных функций не допускаются в C++. Чтобы сделать то, что вы хотите (и я не уверен, что это хорошая идея), поместите определение функции перед функцией OnCollapsing.

...