类/结构定义错误

Class/struct definition error

本文关键字:错误 定义 结构      更新时间:2023-10-16

我正在移植/更新一些非常旧的代码,我的c++不是很熟练(我主要是C程序员)。我收到了这个错误-我如何修复它,有人能解释这个混乱吗?注意,第512行是结构体定义-第一行?

In file included from src/aaa_dict_mngr.cxx:38:0:
./include/aaa_parser_avpvalue.h:512:41: error: expected template-name before '<' token
./include/aaa_parser_avpvalue.h:512:41: error: expected '{' before '<' token
./include/aaa_parser_avpvalue.h:512:41: error: expected unqualified-id before '<' token
违法代码:

struct DiamidentGrammar : public grammar<DiamidentGrammar>
{
  template <typename ScannerT>
  struct definition
  {
    definition(DiamidentGrammar const& self)  
    { 
      diameterIdentity = realm;
      realm = label >> *('.' >> label);  // No recursive rule allowed.
      label = diameterName | diameterDname;
      diameterName = alpha_p >> *(alnum_p | '-');
      diameterDname = digit_p >> +(alnum_p | '-');
    }
    rule<ScannerT> diameterIdentity, realm, label, diameterName, diameterDname;
    rule<ScannerT> const& start() const { return diameterIdentity; }
  };
};

这只是古老的精灵代码。您需要使用经典的headers/命名空间:

查看Live On Coliru

哦,无论如何,升级!Spirit V2已经有几年的历史了,而Spirit x3即将问世

#include <boost/spirit/include/classic.hpp>
using namespace boost::spirit::classic;
struct DiamidentGrammar : public grammar<DiamidentGrammar>
{
    template <typename ScannerT>
        struct definition
        {
            definition(DiamidentGrammar const& self)  
            { 
                diameterIdentity = realm;
                realm = label >> *('.' >> label);  // No recursive rule allowed.
                label = diameterName | diameterDname;
                diameterName = alpha_p >> *(alnum_p | '-');
                diameterDname = digit_p >> +(alnum_p | '-');
            }
            rule<ScannerT> diameterIdentity, realm, label, diameterName, diameterDname;
            rule<ScannerT> const& start() const { return diameterIdentity; }
        };
};
int main()
{
}