Форум программистов, компьютерный форум 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
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
07.07.2015, 10:42     Ошибки в коде с вложеными классами: Невозможно обратиться к private члену
Здорова!
Есть код:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
using std::cout;
 
#include <afxwin.h>
 
#define IDD_One 1
#define IDD_Two 2
#define IDD_IUnknown_my 3
 
struct IUnknown_my
{
    virtual BOOL QueryInterfece(int InId,void** pObj)=0;
};
 
struct IOne : public IUnknown_my
{
    virtual int& fOne()=0;
};
 
struct ITwo : public IUnknown_my
{
    virtual int& fTwo()=0;
};
 
class CObject_my
{
protected:
    int m_value1;
    int m_value2;
public:
    CObject_my(){m_value1=m_value2=0;}
 
    class XOne : public IOne
    {
        XOne(){}//с коснтруктором не работает
        virtual int& fOne();
        virtual BOOL QueryInterfece(int InId,void** pObj);
    }m_xOne;
 
    class XTwo : public ITwo
    {
        XTwo(){}//с конструктором не работатет
        virtual int& fTwo();
        virtual BOOL QueryInterfece(int InId,void** pObj){}
    }m_xTwo;
 
    friend class XOne;
    friend class XTwo;
};
 
int& CObject_my::XOne::fOne()
{
    METHOD_PROLOGUE(CObject_my,One)
    return pThis->m_value1;
}
 
int& CObject_my::XTwo::fTwo()
{
    METHOD_PROLOGUE(CObject_my,Two)
    return pThis->m_value2;
}
 
BOOL CObject_my::XOne::QueryInterfece(int InId,void** pObj)
{
    METHOD_PROLOGUE(CObject_my,Two)
    switch(InId)
    {
    case IDD_IUnknown_my:
    case IDD_One:
        *pObj=&pThis->m_xOne;
    case IDD_Two:
        *pObj=&pThis->m_xTwo;
    }
}
 
void GetClassObject(void** pObj)
{
    CObject_my* ptr=new CObject_my();
    IOne* p=&ptr->m_xOne;
    *pObj=&p;
}
 
int main()
{
    IOne* pOne;//интерфейс 1
    ITwo* pTwo;//интерфейс 2 
 
    //получаем первый интерфейс
    GetClassObject((void**)&pOne);
    cout <<"pOne-fOne()= "<<pOne->fOne()<<"\r\n";
    pOne->fOne();
    cout <<"pOne-fOne()= "<<pOne->fOne()<<"\r\n";
    
    //из первого получаем второй интерфейс
    pOne->QueryInterfece(IDD_Two,(void**)&pTwo);
    cout <<"pTwo-fTwo()= "<<pTwo->fTwo()<<"\r\n";
    pTwo->fTwo()=100;
    cout <<"pTwo-fTwo()= "<<pTwo->fTwo()<<"\r\n";
 
 
    return 0;
}
При компиляцыи пишет ошибку:
1>d:\visual studio 2010\projects\test\test\main.cpp(31): error C2248: CObject_my::XOne::XOne: невозможно обратиться к private член, объявленному в классе "CObject_my::XOne"
1> d:\visual studio 2010\projects\test\test\main.cpp(35): см. объявление "CObject_my::XOne::XOne"
1> d:\visual studio 2010\projects\test\test\main.cpp(33): см. объявление "CObject_my::XOne"
1>d:\visual studio 2010\projects\test\test\main.cpp(31): error C2248: CObject_my::XTwo::XTwo: невозможно обратиться к private член, объявленному в классе "CObject_my::XTwo"
1> d:\visual studio 2010\projects\test\test\main.cpp(42): см. объявление "CObject_my::XTwo::XTwo"
1> d:\visual studio 2010\projects\test\test\main.cpp(40): см. объявление "CObject_my::XTwo"
1>d:\visual studio 2010\projects\test\test\main.cpp(53): error C2039: m_xXOne: не является членом "CObject_my"


Типо мешает конструктор во вложеных классах. Там когда я закомментирую конструкторы во вложеных классах, то вылазит другая ошибка касающаяся макроса METHOD_PROLOGUE:
1>d:\visual studio 2010\projects\test\test\main.cpp(53): error C2039: m_pModuleState: не является членом "CObject_my"
1> d:\visual studio 2010\projects\test\test\main.cpp(26): см. объявление "CObject_my"
1>d:\visual studio 2010\projects\test\test\main.cpp(59): error C2039: m_pModuleState: не является членом "CObject_my"
1> d:\visual studio 2010\projects\test\test\main.cpp(26): см. объявление "CObject_my"
1>d:\visual studio 2010\projects\test\test\main.cpp(65): error C2039: m_pModuleState: не является членом "CObject_my"
1> d:\visual studio 2010\projects\test\test\main.cpp(26): см. объявление "CObject_my"


Ниче не ясно почему нельзя конструкторы во вложеных классах создавать? и что это за член m_pModuleState???
В книге вроде код такой и должен работать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru