no viable conversion from TObject * to TDirectory
در بسیاری از برنامه های نوشته در GEANT4 فراخوانی اطلاعات به صورت زیر نوشته شده است.
هنگام اجرای این دستور پیام زیر رخ می دهد.
کد چه پردازشی انجام می دهد؟
فایل radioprotection_NEW.root حاصل اجرایی برنامه میکرودزیمتری در GEANT4 است. پس از اجرای برنامه درون آن اطلاعات در مسیر radioprotection_ntuple ذخیره می شود. بنابراین ابتدا فایل radioprotection_NEW.root را به عنوان متغیر f از جنس TFile معرفی می کنیم. حال می گوییم که مسیر radioprotection_ntuple را فراخوانی و به عنوان متغییر dir ذخیره کن.
مشکل این است که در root بین متغییر هایی از جنس * و بدون * فرق می کند. بنابراین متغییری از جنس بدون * را وقتی میخواهد به متغییری به جنس با * تبدیل کند خطا می می دهد. برای حل این مشکل دستور را به صورت زیر باز نویسی می کنیم.
TDirectory* dir =(TDirectory*) f.Get("radioprotection_ntuple");
در این حالت ابتدا متغییر به حالت * دار تبدیل می شود و توسط فرآیند انتصاب با استفاده از عملگر = صورت میگیرد.