2016-07-23 45 views
-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); 

等与其他参数的函数。 为什么他不承认他们,因为他们在标题中声明?

+1

你问为什么函数A的参数在函数B中看不到? – melpomene

+0

我在问为什么在头文件中声明的函数CreateHisto的参数在我调用.cxx函数时无法识别。 – Alessia90

+0

啊。这是因为函数参数是该函数中的有效局部变量。它们与调用该函数无关。 – melpomene

回答

2

作为编译器说:name,应该在某个地方声明。 你感到困惑的功能protototype和variabile的声明

int sum(int x, int y){ return x+y;} 

void doSomething() 
{ 
sum(x,y); 
} 

coud不行概念

这个例子的工作:

int sum(int x, int y){ return x+y;} 

void doSomething() 
{ 
int a = 5; 
int b = 6; 
sum(a,b); 
} 

x和y的功能 a和b参数数据传递给函数调用。

相关问题