2016-07-23 10 views
-2

Mein Code besteht aus einer Header-Datei und einer .cxx-Datei. In der Kopfzeile die Erklärungen der Methoden der Klasse gibt es wie im folgenden Beispiel:Warum erkennt es Parameter einer Funktion nicht?

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(); 

Im .cxx die Funktion „CreateHisto“ definiert ist:

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; 
} 

nach CreateHisto habe ich die Funktion genannt initialize(), wo ich muss ein Datenelement initialisieren, um die CreateHisto Funktion namens „m_myhisto“ und was ich tue, ist die folgende:

EL::StatusCode MyxAODAnalysis :: initialize() 
{ 



m_myhisto = MyxAODAnalysis::CreateHisto(name, title, nbin, xmin, xmax); 

return EL::StatusCode::SUCCESS; 
} 

Aber auf diese Weise tut es nicht c ompile, es gibt mir die folgende Fehlermeldung:

error: ‘name’ was not declared in this scope 
m_myhisto = MyxAODAnalysis::CreateHisto(name, title, nbin, xmin, xmax); 

und so weiter mit den anderen Parametern der Funktion. Warum erkennt er sie nicht, seit sie im Header deklariert sind?

+1

Fragen Sie sich, warum Parameter der Funktion A in Funktion B nicht sichtbar sind? – melpomene

+0

Ich frage, warum Parameter der Funktion CreateHisto in der Kopfzeile deklariert nicht erkannt werden, wenn ich die Funktion in der .cxx aufrufen. – Alessia90

+0

Ah. Das liegt daran, dass Funktionsparameter in dieser Funktion tatsächlich lokale Variablen sind. Sie haben nichts damit zu tun, diese Funktion aufzurufen. – melpomene

Antwort

2

wie der Compiler sagte: Name, sollte irgendwo deklariert werden. Sie sind verwirrend das Konzept der Funktion protototype und variabile Erklärungen

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

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

nicht funktionieren coud

dieses Beispiel Arbeit:

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

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

x und y sind Parameter der Funktionen a und b Daten, die an den Funktionsaufruf übergeben wurden.

Verwandte Themen