如何为类生成字典(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
时,确切的错误是什么?