2016-03-23 11 views
2

こんにちは私はprotobufで作業していますが、問題があります。プロトコルバッファ使用enum

私はいくつかの列挙関数を持っていますが、これらのうちのいくつかの言語のファイルをコンパイルしようとすると、同じエイリアスがあります。

この例をprotobufドキュメントにコピーして、列挙型を定義しても動作しないようにしました。

num EnumAllowingAlias { 
    option allow_alias = true; 
    UNKNOWN = 0; 
    STARTED = 1; 
    RUNNING = 1; 
} 
enum EnumNotAllowingAlias { 
    UNKNOWN = 0; 
    STARTED = 1; 
    // RUNNING = 1; // Uncommenting this line will cause a compile error inside Google and a warning message outside. 
} 

これは、Googleドキュメントは、あなたには、いくつかの異なる列挙型で同じエイリアスを使用する必要がある場合は、オプションを追加する必要があると述べている「オプションallow_alias =真;」列挙型ではなく、.protoファイルをコンパイルしようとした後にコンパイラの応答を返します。

example.proto:13:5: "UNKNOWN"は既に "namespace"で定義されています。 example.proto:13:5:enum値はC++スコープ規則を使用しています。つまり、enum値はその型の兄弟であり、その子ではありません。したがって、 "UNKNOWN"は "EnumNotAllowingAlias"内だけでなく、 "kluso"内で一意でなければなりません。 example.proto:14:5: "名前空間"に "STARTED"がすでに定義されています。 example.proto:14:5:enum値はC++スコープ規則を使用することに注意してください。つまり、enum値はその型の兄弟であり、その子ではありません。したがって、 "開始"は "EnumNotAllowingAlias"内だけでなく、 "kluso"内で一意でなければなりません。

私は何が起こっているのか分かりません。誰かが問題を知っていますか?

答えて

0

あなたが探している答えは、エラーメッセージです。実際に何を伝えているかを解析するのはちょっと難しいです。何

列挙値は、それのない子供

手段、そのタイプの兄弟であることは、むしろ列挙値がMyEnum.FOOMyEnum2.FOOとしてスコープされているよりも、それらがスコープされ、ということである。基本的

は、MyEnumと同じレベルです。したがって、同じ.protoファイルの2つの列挙型値には、同じ名前のはありません。彼らはMyEnum.FOOMyEnum2.FOOではなく、そのファイル内にFOOとして存在しようとしています。

+0

私はallow_aliasingを設定していません。 Hm。 – BlueSpaceCanary

0

私は最初はEnumAllowingAliasで、secundが、これは

https://developers.google.com/protocol-buffers/docs/proto#enum

の例であるEnumNotAllowingAliasあるdigfferent名前の2つの列挙型を持っているので、tはあなたのポイントを理解する「を着用し、例の前に彼らは説明します

"別の列挙定数に同じ値を割り当てることによってエイリアスを定義することができます。これを行うには、 allow_aliasオプションを に設定すると、 エイリアスが見つかると、プロトコルコンパイラはエラーメッセージを生成します。

このような場合、私はこれらの2つの列挙型を作成することができます。コンパイラはエイリアスを最初にエイリアスで作成し、エイリアスなしで2番目のエイリアスを作成する必要があります。

関連する問題