2017-07-28 4 views
0

2つの.protoファイルがあります。これには相互依存関係のある2つのパッケージがあります。相互依存関係のある.protoファイルを含める方法

a.proto

syntax = "proto3"; 
import "b.proto"; 

package a; 

message cert { 
    string filename = 1; 
    uint32 length = 2; 
} 

enum state { 
    UP = 1; 
    DOWN = 2; 
} 

message events { 
    repeated b.event curevent = 1; 
    uint32 val = 2; 
} 

b.proto

syntax = "proto3"; 
import "a.proto"; 

package b; 

message event { 
    a.cert certificate = 1; 
    a.state curstate = 2; 
} 

私はcppのファイルを生成しようとすると、次のエラーが

これを達成することができる方法

# protoc -I. --cpp_out=. b.proto b.proto: File recursively imports itself: b.proto -> a.proto -> b.proto

を見ていますか?

注:使用protocバージョンでは、循環依存が含ませませんlibprotoc 3.3.0

+0

もしも相互依存関係ならば、共有部分をc.protoに動かすと動作しますが、あなたのシナリオを見れば、すべてを1つのファイルに移動することはできません。 –

答えて

0

プロトコンパイラです。再帰的なインポートがないようにコードを整理する必要があります。あなたのeventsタイプがa.protoから何かを使用していません

syntax = "proto3"; 

package a; 

message cert { 
    string filename = 1; 
    uint32 length = 2; 
} 

enum state { 
    UNDEFINED = 0; 
    UP = 1; 
    DOWN = 2; 
} 

syntax = "proto3"; 
import "a.proto"; 

package b; 

message event { 
    a.cert certificate = 1; 
    a.state curstate = 2; 
} 

message events { 
    repeated event curevent = 1; 
    uint32 val = 2; 
} 

b.proto

a.proto、ともeventタイプを使用しています:あなたのサンプルコードの一つの組織では、上記の可能性b.protoから。それをb.protoに移動すると意味があります。

関連する問題