c++ - आउटग - फ़ोन कॉल सेटिंग



Std:: अधिकतम कॉल करने में समस्या (2)

मैंने विजुअल स्टूडियो में अपनी बाइसन जेनरेट की गई फाइलों को संकलित किया और इन त्रुटियों को प्राप्त किया:

... \ position.hh (83): त्रुटि C2589: '(': '::' के दायीं तरफ अवैध टोकन
... \ position.hh (83): त्रुटि C2059: वाक्यविन्यास त्रुटि: '::'
... \ position.hh (83): त्रुटि C2589: '(': '::' के दायीं तरफ अवैध टोकन
... \ position.hh (83): त्रुटि C2059: वाक्यविन्यास त्रुटि: '::'

संबंधित कोड है:

inline void columns (int count = 1)
{
  column = std::max (1u, column + count);
}

मुझे लगता है कि समस्या std :: max के साथ है; अगर मैं std :: max को समकक्ष कोड में बदलता हूं तो अब कोई समस्या नहीं है, लेकिन क्या जेनरेट कोड बदलने के बजाय कोई बेहतर समाधान है?

यहां लिखा गया बाइसन फ़ाइल है:

//
// bison.yy
//

%skeleton "lalr1.cc"
%require "2.4.2"
%defines
%define parser_class_name "cmd_parser"
%locations
%debug
%error-verbose

%code requires {
class ParserDriver;
}

%parse-param { ParserDriver& driver }
%lex-param { ParserDriver& driver }

%union {
    struct ast *a;
    double d;
    struct symbol *s;   
    struct symlist *sl;
    int fn;         
}

%code {
#include "helper_func.h"
#include "ParserDriver.h"
std::string error_msg = "";
}

%token <d> NUMBER
%token <s> NAME
%token <fn> FUNC
%token EOL
%token IF THEN ELSE WHILE DO LET
%token SYM_TABLE_OVERFLOW
%token UNKNOWN_CHARACTER

%nonassoc <fn> CMP
%right '='
%left '+' '-'
%left '*' '/'
%nonassoc '|' UMINUS

%type <a> exp stmt list explist
%type <sl> symlist

%{
extern int yylex(yy::cmd_parser::semantic_type *yylval,
 yy::cmd_parser::location_type* yylloc);
%}

%start calclist
%%

... grammar rules ...

https://src-bin.com


Answer #1

आप शायद windows.h सहित कहीं भी हैं, जो max और min नामक मैक्रोज़ को परिभाषित करता है।

आप उन मैक्रोज़ को परिभाषित करने से रोकने के लिए windows.h सहित पहले #define NOMINMAX को परिभाषित कर सकते हैं, या आप #define NOMINMAX अतिरिक्त सेट का उपयोग करके मैक्रो आमंत्रण को रोक सकते हैं:

column = (std::max)(1u, column + count);

Answer #2

किसी भी शीर्षलेख को शामिल करने से पहले, अपने स्रोत के शीर्ष पर NOMINMAX प्रतीक को परिभाषित करें। Visual C ++ windows.h में कहीं मैक्रोज़ के रूप में min और max परिभाषित करता है, और वे आपके मानक कार्यों के उपयोग में हस्तक्षेप करते हैं।

#define NOMINMAX




bison