non-aggregate type??
-
Halloechen mal wieder. Bei meinem aktuellen problem hab ich folgende Klasse:
class TInitUE { public: TInitUE(); //Default Constructor; // weiterer Constructor, macht nicht viel mehr als der default ctor // plus ein paar Aufrufe von add_to_chain() TInitUE(const Int_t nDir, const TString *const dirName, const TString *const fileNamePrefix, const Int_t *const nFiles, const TString *const fileNameSuffix, const Int_t *const minFileNr = 0); ~TInitUE(); // Destructor void analyze_chain(TString options, TString targetFile); void add_to_chain(TString dirName, TString fileNamePrefix, Int_t nFiles, TString fileNameSuffix, Int_t minFileNr = 1, Int_t nSkips = 0, const Int_t *const skipList = 0); // with Skips, without minFNr inline void add_to_chain(TString dirName, TString fileNamePrefix, Int_t nFiles, TString fileNameSuffix, Int_t nSkips, const Int_t *const skipList) {add_to_chain(dirName, fileNamePrefix, nFiles, fileNameSuffix, 1, nSkips, skipList);}; protected: TChain *myChain_; private: inline void init_chain() {myChain_ = new TChain("h1");}; };Folgende Funktion wird nun einwandfrei compiliert:
void initmcdir(Int_t doWholeAnalysis = 0) { TInitUE init(mcdir_nDir, mcdir_dirNames, mcdir_filePref, (doWholeAnalysis==1)?mcdir_nFiles:mcdir_testNF, mcdir_fileSuf, mcdir_minFNr); // list 2 starts with fileNo 12 init.analyze_chain(mcdir_options, mcdir_fileName); };Und folgende nicht:
void inidmcres(Int_t doWholeAnalysis = 0) { TInitUE init(); init->add_to_chain(mcres_dirNames[0], mcres_filePref[0], //line 44 (doWholeAnalysis==1)?mcres_nFiles[0]:mcres_testNF[0], mcres_fileSuf[0]); init->add_to_chain(mcres_dirNames[1], mcres_filePref[1], //line 47 (doWholeAnalysis==1)?mcres_nFiles[1]:mcres_testNF[1], mcres_fileSuf[1], 0, mcres_nSkips2, mcres_skipList2); };Er spuckt mir folgendes aus:
newinit.C:44: error: request for member ` add_to_chain' in `init', which is of non-aggregate type `TInitUE ()()' newinit.C:47: error: request for member ` add_to_chain' in `init', which is of non-aggregate type `TInitUE ()()'nach dem was ich rausfinden konnte kommt so eine Fehlermeldung wenn man versucht, ueber pointer mit dem `.'-Operator auf klassenmember zuzugreifen, was aber hier doch nicht der Fall ist. Was also will der compiler von mir?
-
TInitUE init();Dies hier ist die Deklaration einer Funktion mit dem Namen init und dem Rückgabewert TInitUE. Der Compiler beschwert sich also völlig zurecht, dass Du versuchst eine Methode auf eine Funktion (statt ein Objekt) anzuwenden.
Lösung:
Du musst die Klammern hinten weglassen.
-
EDIT: 2L8 !
-
Autsch danke...
