如何为类生成字典(vector<;vector<;short>;) 我有一个简单的代码,我用C++编写,用make编译它。 我编译时不会出错。但是当我运行它时,我得到一个由std::vector引起的错误,请参见下面的错误:

如何为类生成字典(vector<;vector<;short>;) 我有一个简单的代码,我用C++编写,用make编译它。 我编译时不会出错。但是当我运行它时,我得到一个由std::vector引起的错误,请参见下面的错误:,c++,dictionary,stl,makefile,root-framework,C++,Dictionary,Stl,Makefile,Root Framework,中出错:无法确定为“apv\U q”地址指定的类型。所需的类(vector)引用stl集合,并且没有已编译的CollectionProxy。请为此类生成字典(vector) TTree::SetBranchAddress是来自CERN-ROOT框架的方法 apv_q定义为std::vector*apv_q 我不熟悉生成字典,所以我在网上搜索,找到了在头文件中添加以下行的建议 #ifdef __MAKECINT__ #pragma link C++ class vector<short&

中出错:无法确定为“apv\U q”地址指定的类型。所需的类(
vector
)引用stl集合,并且没有已编译的CollectionProxy。请为此类生成字典(
vector

TTree::SetBranchAddress
是来自CERN-ROOT框架的方法

apv_q定义为
std::vector*apv_q

我不熟悉生成字典,所以我在网上搜索,找到了在头文件中添加以下行的建议

 #ifdef __MAKECINT__
 #pragma link C++ class vector<short> +;
 #pragma link C++ class vector<vector<short> >+;
 #endif
#ifdef_uumakecint__
Pr+PrimaMink链接C++类向量+;
Pr+PrimaMink链接C++类向量+;
#恩迪夫
但它不起作用

所以我需要你的帮助来解决这个问题,请帮忙

提前多谢

干杯

Eda

如果相关,下面是我的MakeFile:

      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 $@ $(CXXFLAGS) $(ADDCXXFLAGS) $(HITMAKEROBJS) $(LDFLAGS) $(LIBS)

      %.o: %.cc $(HDRS)
              $(CXX) $(CXXFLAGS) $(ADDCXXFLAGS) -c $< 
CONFIG=root配置
CXXFLAGS=$(shell$(配置)--cflags
LIBS=$(shell$(配置)--glibs
LDFLAGS=$(shell$(配置)--LDFLAGS)
CXX=g++
ADDCXXFLAGS=-ggdb-O0-std=c++0x
HDRS=./Settings.h./HitMaker.h
HITMAKEROBJS=HitMaker.o
所有人:杀手
hitmaker:$(HITMAKEROBJS)
$(CXX)-o$@$(CXXFLAGS)$(ADDCXFLAGS)$(HITMAKEROBJS)$(LDFLAGS)$(LIBS)
%.o:%.cc$(HDRS)
$(CXX)$(CXXFLAGS)$(ADDCXFLAGS)-c$<
您必须运行并为其提供头文件列表,包括包含行的
LinkDef.h

#pragma link C++ class vector<short> +;
#pragma link C++ class vector<vector<short> >+;
并添加到Makefile中

HITMAKEROBJS=HitMaker.o bla.o
我创建了一个根文件

TFile file("test.root", "RECREATE");
TTree tree("tree", "treetitle");
std::vector<std::vector<short>> test;
std::vector<short> test2;
test2.push_back(1);
test.push_back(test2);
tree.Branch("test", &test);
tree.Fill();
tree.Write();
t文件文件(“test.root”,“RECREATE”);
树(“树”、“树梢”);
病媒试验;
std::向量test2;
测试2.推回(1);
测试。推回(测试2);
树分支(“测试”和“测试”);
tree.Fill();
tree.Write();
然后用英语把它读回来

TFile file("test.root");
TTree* t= NULL;
file.GetObject("tree", t);
std::vector<std::vector<short>>* test = NULL;
t->SetBranchAddress("test", &test);
t->GetEvent(0);
std::cout << test->front().front() << std::endl;
t文件文件(“test.root”);
TTree*t=NULL;
GetObject(“树”,t);
std::vector*test=NULL;
t->test地址(“测试”、&test);
t->GetEvent(0);
std::cout front().front()您必须运行并为其提供头文件列表,包括包含行的
LinkDef.h

#pragma link C++ class vector<short> +;
#pragma link C++ class vector<vector<short> >+;
并添加到Makefile中

HITMAKEROBJS=HitMaker.o bla.o
我创建了一个根文件

TFile file("test.root", "RECREATE");
TTree tree("tree", "treetitle");
std::vector<std::vector<short>> test;
std::vector<short> test2;
test2.push_back(1);
test.push_back(test2);
tree.Branch("test", &test);
tree.Fill();
tree.Write();
t文件文件(“test.root”,“RECREATE”);
树(“树”、“树梢”);
病媒试验;
std::向量test2;
测试2.推回(1);
测试。推回(测试2);
树分支(“测试”和“测试”);
tree.Fill();
tree.Write();
然后用英语把它读回来

TFile file("test.root");
TTree* t= NULL;
file.GetObject("tree", t);
std::vector<std::vector<short>>* test = NULL;
t->SetBranchAddress("test", &test);
t->GetEvent(0);
std::cout << test->front().front() << std::endl;
t文件文件(“test.root”);
TTree*t=NULL;
GetObject(“树”,t);
std::vector*test=NULL;
t->test地址(“测试”、&test);
t->GetEvent(0);

std::cout front().front()顺便说一句,ROOT有它自己的,所以它可能是使用它们而不是
std::vector
的另一种选择,非常感谢,但我还有更多的问题。嗯,我检查了rootcint并执行了
rootcint-f bla.cc-c HitMaker.h LinkDef.h
。它按预期创建了bla.cc和bla.h。我对编译感到困惑,我将make文件更改为具有
HDRS=$(HDIR)/Settings.h$(HDIR)/HitMaker.h$(HDIR)/bla.h
HITMAKEROBJS=HitMaker.o
,但它给出了相同的错误。如果我将bla.o添加到HITMAKEROBJS,那么它会抱怨变量的多个定义。我该怎么办?您使用的是哪个版本的root?Debian 8上有5.34。SL6上也有5.34。当你将
bla.o
添加到
HITMAKEROBJS
时,确切的错误是什么?顺便说一句,ROOT有自己的,所以它可能是使用它们而不是
std::vector
的替代品。谢谢,但我还有更多问题。嗯,我检查了rootcint并执行了
rootcint-f bla.cc-c HitMaker.h LinkDef.h
。它按预期创建了bla.cc和bla.h。我对编译感到困惑,我将make文件更改为具有
HDRS=$(HDIR)/Settings.h$(HDIR)/HitMaker.h$(HDIR)/bla.h
HITMAKEROBJS=HitMaker.o
,但它给出了相同的错误。如果我将bla.o添加到HITMAKEROBJS,那么它会抱怨变量的多个定义。我该怎么办?您使用的是哪个版本的root?我在Debian 8上有5.34。在SL6上也有5.34。当您将
bla.o
添加到
HITMAKEROBJS
时,确切的错误是什么?