Имам програма, в която трябва да направя базов клас, който се споделя между dll и някакъв код на приложение. След това имам два различни производни класа, един в dll, един в основното приложение. Всяка от тях има някои статични членски функции, които работят с данните в класа nase. (Те трябва да са статични, тъй като се използват като указатели на функции другаде). В най-простата си форма моят проблем е показан по-долу.
class Base {
protected:
int var ;
};
class Derived : public Base {
static bool Process( Base *pBase ) {
pBase->var = 2;
return true;
}
};
Моят компилатор се оплаква, че не мога да получа достъп до защитени членове на pBase, въпреки че Derived има защитен достъп до Base. Има ли някакъв начин да се заобиколи това или нещо не съм разбрал? Мога да направя променливите Base публични, но това би било лошо, тъй като в моя реален случай те са част от разпределената памет и семафорите, за да я защитят за многопоточност.
Помогне?
static
, а защото параметърът, чрез който се осъществява достъп до основния член, не е от типDerived
. - person CB Bailey   schedule 05.09.2011Base
обекти, които са подобекти от базов клас наDerived
обекти, които можете да използватеstatic_cast
за преобразуване отBase*
вDerived*
в тялото на функцията. В противен случай ще трябва да стеfriend
отBase
или можете да променитеvar
, за да бъде публичен. Ако не можете да направите нито едно от тези, значи сте блокирани. - person CB Bailey   schedule 05.09.2011