Форум программистов, компьютерный форум CyberForum.ru

Ошибки в коде с вложеными классами: Невозможно обратиться к private члену - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Отсортировать массив по убыванию и найти в нем элемент, равный X http://www.cyberforum.ru/cpp-beginners/thread1494390.html
Помогите пожалуйста написать программу, которая сортирует массив ПО УБЫВАНИЮ и ищет в нем элемент, равный X (это число вводится с клавиатуры). Использовать двоичный поиск.
C++ Конветирование строки char в time_t или в struct tm Есть строковые переменные типа char над которыми нужно производить вычисления (сравнение, получение разницы). Порыл сеть на предмет как это делать, - в принципе понятно, но все преобразования производятся на переменными типа time_t или struct tm, а у меня типа char вида "YYYY-MM-DD". Как преобразовать то, что есть у меня к типу time_t или к структуре tm??? http://www.cyberforum.ru/cpp-beginners/thread1494382.html
Выделить в другой массив все числа, которые встречаются более одного раза в исходном C++
Всем привет.Помогите пожалуйста,очень надо,выручите,буду очень благодарен. Заполнить массив случайными числами и выделить в другой массив все числа, которые встречаются более одного раза. Пример: Исходный массив: 4 1 2 1 11 2 34 Результат: 1 2
C++ Перегрузка оператора запись в поток
Здравствуйте! Подскажите, пожалуйста, возможно ли так реализовать: #include <fstream> class ClassA { public: bool Initialize(); void Shutdown(); void Write(char*);
C++ Как записать выражение, чтобы не отбрасывалась дробная часть? http://www.cyberforum.ru/cpp-beginners/thread1494356.html
Здравствуйте.Есть такой код: double s = 14.5; int m = 4; double b=s/m При вычислении выражения отбрасывается дробная часть. Знаю, что при делении на конкретное число, можно записать b = s/4.0. А как быть когда в выражении только переменные?
C++ Вывести массив в обратном порядке Задание в том чтоб ввести массив который оканчивается на 0, и выводило массив в обратном порядке но без 0. #include <iostream> using namespace std; void func() { int number; подробнее

Показать сообщение отдельно
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
07.07.2015, 13:24  [ТС]     Ошибки в коде с вложеными классами: Невозможно обратиться к private члену
Цитата Сообщение от Croessmah Посмотреть сообщение
Так же, как и не из вложенного:
Так это нужно объект в функцию передавать как параметр, а нужно получить без передачи объекта, как было бы с использование METHOD_PROLOGUE(CObject_my,One) , как то так.
Там макрос:
C++
1
2
3
4
5
#define METHOD_PROLOGUE(theClass, localClass) \
    theClass* pThis = \
        ((theClass*)((BYTE*)this - offsetof(theClass, m_x##localClass))); \
    AFX_MANAGE_STATE(pThis->m_pModuleState) \
    pThis; // avoid warning from compiler \
У меня он не работает типо нету m_pModulesState, что это такое хз.

Добавлено через 25 минут
Переписал макрос без второй части от так:
C++
1
2
3
#define METHOD_PROLOGUE_my(theClass, localClass) \
    theClass* pThis = \
        ((theClass*)((BYTE*)this - offsetof(theClass, m_x##localClass))); \
Вроде работает, только я не пойму как он работает, от код функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
BOOL CObject_my::XOne::QueryInterfece(int InId,void** pObj)
{
    METHOD_PROLOGUE_my(CObject_my,One)
    switch(InId)
    {
    case IDD_IUnknown_my:
    case IDD_One:
        *pObj=&pThis->m_xOne;
        cout <<"mu tyt1\r\n";
        break;
    case IDD_Two:
        *pObj=&pThis->m_xTwo;
        cout <<"mu tyt2\r\n";
        break;
    default:
        *pObj=NULL;
        return FALSE;
    }
    return TRUE;
}
Если я пишу отак METHOD_PROLOGUE_my(CObject_my,One), то все нормально, а если я добавляю так METHOD_PROLOGUE_my(CObject_my,Two) почему то оно работает хз. как, функция вызывается левая для указателя не fTwo, а другая fOne хотя указатель вроде на ITwo.
Вообще что попало выводится?

Добавлено через 22 минуты
Croessmah, Можно еще вроде от так получить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using std::cout;
 
 
class Test
{
public:
    int x ;
    Test( int x_=0 ) : x(x_) {}
    
    class Sub
    {
    public:
        void print () const 
        {
            Test* pThis=(Test*)((unsigned char*)this - offsetof(Test, m_xSub));
            std::cout << pThis->x<< std::endl ; 
        }
    }m_xSub;
};
 
int main()
{
    Test* p=new Test(100);
    Test::Sub* obj=&p->m_xSub;
    obj->print();
}
Test* pThis=(Test*)((unsigned char*)this - offsetof(Test, m_xSub));
получаем указатель на класс и его используем
 
Текущее время: 17:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru