-2
我的代码是用一个头文件和一个.cxx文件构建的。在报头中存在的类的方法如以下声明:为什么它不识别函数的参数?
virtual EL::StatusCode setupJob (EL::Job& job);
virtual EL::StatusCode fileExecute();
virtual EL::StatusCode histInitialize();
virtual EL::StatusCode changeInput (bool firstFile);
std::vector<TH1F*>* CreateHisto (const char* name, const char* title, int nbin, double xmin, double xmax);
virtual EL::StatusCode initialize();
virtual EL::StatusCode llselection();
virtual EL::StatusCode execute();
virtual EL::StatusCode postExecute();
virtual EL::StatusCode finalize();
virtual EL::StatusCode histFinalize();
在.CXX函数“CreateHisto”被定义:
std::vector<TH1F*>* MyxAODAnalysis :: CreateHisto(const char* name, const char* title, int nbin, double xmin, double xmax)
{
std::vector<TH1F*>* histo = new std::vector<TH1F*>(m_variations.size());
innermap::const_iterator inner_itmap;
mainmap::const_iterator itmap;
for (itmap = m_variations.begin(); itmap != m_variations.end(); itmap++) {
for (inner_itmap = (*itmap).second.begin(); inner_itmap != (*itmap).second.end(); inner_itmap++) {
int index = (*inner_itmap).second;
std::string nameh = name + ' ' + (*inner_itmap).first;
const char* namehc = nameh.c_str();
histo[index].push_back(new TH1F(namehc, title, nbin, xmin, xmax));
}
}
return histo;
}
CreateHisto后我有功能名为initialize(),我必须初始化名为“m_myhisto”到CreateHisto功能,我在做什么数据成员如下:
EL::StatusCode MyxAODAnalysis :: initialize()
{
m_myhisto = MyxAODAnalysis::CreateHisto(name, title, nbin, xmin, xmax);
return EL::StatusCode::SUCCESS;
}
但这种方式确实不是C ompile,它给我以下错误:
error: ‘name’ was not declared in this scope
m_myhisto = MyxAODAnalysis::CreateHisto(name, title, nbin, xmin, xmax);
等与其他参数的函数。 为什么他不承认他们,因为他们在标题中声明?
你问为什么函数A的参数在函数B中看不到? – melpomene
我在问为什么在头文件中声明的函数CreateHisto的参数在我调用.cxx函数时无法识别。 – Alessia90
啊。这是因为函数参数是该函数中的有效局部变量。它们与调用该函数无关。 – melpomene