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?
Fragen Sie sich, warum Parameter der Funktion A in Funktion B nicht sichtbar sind? – melpomene
Ich frage, warum Parameter der Funktion CreateHisto in der Kopfzeile deklariert nicht erkannt werden, wenn ich die Funktion in der .cxx aufrufen. – Alessia90
Ah. Das liegt daran, dass Funktionsparameter in dieser Funktion tatsächlich lokale Variablen sind. Sie haben nichts damit zu tun, diese Funktion aufzurufen. – melpomene