ベクトルを返すANTLRルールがあります:
main returns [std::vector<int> v]
:
('ERROR' t3=INT{v.push_back(atoi((const char*)$t3.text->chars));}
'='t4=INT{v.push_back(atoi((const char*)$t4.text->chars));}
);
次に、C ++から呼び出して、ベクターデータを取得しようとします。
ただし、私の問題は、ANTLR3がベクトルvをNULLに自動的に初期化することです。これは許可されておらず、エラーが発生します。
antlrのC++出力を生成し、プロジェクトでコンパイルしようとすると、エラーが発生します。
ANTLRが出力するparsedfileに手動で移動し、NULLオプションへの設定を削除して再度コンパイルすると、すべてがうまくいきました。
私はおそらくこの問題の解決策を見ることができます:
1)ANTLRから自分でベクトルを初期化する(ベクトルを初期化する方法を知らない)
2)ANTLRが私のベクターを初期化するのを防ぎます(それができるかどうかわからない)
3)常に手動で初期化を変更します(お勧めできません)
4)ベクトルを返す別の方法を見つけ、配列へのポインターを返そうとすると、次のエラーが発生します。
error: conversion from ‘std::vector<int, std::allocator<int> >*’ to non-scalar type ‘std::vector<int, std::allocator<int> >’ requested
何か助けはありますか?