2010-05-07 33 views
50

tôi biên soạn file bò rừng tạo của tôi trong Visual Studio và có các lỗi này:Vấn đề gọi std :: max

... \ position.hh (83): lỗi C2589: '(': dấu hiệu bất hợp pháp ở bên phải của '::'
... \ position.hh (83): lỗi C2059: lỗi cú pháp: '::'
... \ position.hh (83): lỗi C2589: '(' : dấu hiệu bất hợp pháp trên bên phải của '::'
... \ position.hh (83): lỗi C2059: lỗi cú pháp: '::'

các đồng mã rresponding là:

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

Tôi nghĩ rằng vấn đề là với std :: max; nếu tôi thay đổi std :: max thành mã tương đương thì không còn vấn đề gì nữa, nhưng có giải pháp nào tốt hơn thay vì thay đổi mã được tạo không?

Dưới đây là file bò rừng bizon tôi đã viết:

// 
// 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 ... 

Trả lời

107

Bạn có lẽ bao gồm windows.h nơi nào đó, trong đó xác định các macro tên maxmin.

Bạn có thể #define NOMINMAX trước bao gồm windows.h để ngăn chặn nó từ việc xác định những macro, hoặc bạn có thể ngăn chặn sự thỉnh nguyện vĩ mô bằng cách sử dụng thêm một bộ ngoặc:

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

Xác định biểu tượng NOMINMAX ở đầu nguồn của bạn, trước khi bạn đưa vào bất kỳ tiêu đề nào. Visual C++ định nghĩa minmax dưới dạng macro ở đâu đó trong windows.h và chúng ảnh hưởng đến việc bạn sử dụng các hàm chuẩn tương ứng.

#define NOMINMAX 
Các vấn đề liên quan