私はC++で書いたシンプルなコードをmakeを使ってコンパイルします。 コンパイル時にエラーは発生しません。しかし、私はそれを実行したとき、私はstd::vector< std::vector<short> >
によって引き起こされるエラーを取得し、エラー以下を参照してください。クラスの辞書を生成する方法(ベクトル<ベクトル<short>>)
Error in
<TTree::SetBranchAddress>
: Unable to determine the type given for the address for "apv_q". The class expected (vector<vector<short> >
) refers to an stl collection and do not have a compiled CollectionProxy. Please generate the dictionary for this class (vector<vector<short> >
)
TTree::SetBranchAddress
は
apv_qがstd::vector< std::vector<short> > *apv_q;
私はのように定義されたCERN-ROOTフレームワークからの方法であり、辞書を生成することに慣れていないので、私はオンラインで検索し、ヘッダーファイルに以下の行を追加する提案を見つけました。
しかし、それは動作しません!
私はこの問題を解決するためにあなたの助けが必要です、助けてください!
ありがとうございます!あなたが含まれているLinkDef.h
含め、root-cint
を実行し、それをあなたのヘッダファイルのリストを与える必要があり
CONFIG=root-config
CXXFLAGS=$(shell $(CONFIG) --cflags)
LIBS=$(shell $(CONFIG) --glibs)
LDFLAGS=$(shell $(CONFIG) --ldflags)
CXX=g++
ADDCXXFLAGS=-ggdb -O0 -std=c++0x
HDRS= ./Settings.h ./HitMaker.h
HITMAKEROBJS= HitMaker.o
all: hitmaker
hitmaker: $(HITMAKEROBJS)
$(CXX) -o [email protected] $(CXXFLAGS) $(ADDCXXFLAGS) $(HITMAKEROBJS) $(LDFLAGS) $(LIBS)
%.o: %.cc $(HDRS)
$(CXX) $(CXXFLAGS) $(ADDCXXFLAGS) -c $<
BTW、ROOTには独自の[コンテナクラス](https://root.cern.ch/doc/master/classTArrayS.html)がありますので、 'std :: vector'の代わりに使用することもできます –
ありがとうございますが、私はより多くの質問があります。さて、私はrootcintをチェックし、 'rootcint -f bla.cc -c HitMaker.h LinkDef.h'を実行しました。期待どおりにbla.ccとbla.hが作成されました。私はコンパイルと混同しています。 'HDRS = $(HDIR)/Settings.h $(HDIR)/HitMaker.h $(HDIR)/ blaに変更しました。h ' ' HITMAKEROBJS = HitMaker.o' でも同じエラーが出ます。 bla.oをHITMAKEROBJSに追加すると、変数の多重定義について不平を言います。 どうすればよいですか? –
使用しているルートのバージョンは?私はDebian 8に5.34を持っています。 –