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

Ошибка в создании абстрактного класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Абстрактные контейнерные типы ? http://www.cyberforum.ru/cpp-beginners/thread396946.html
Есть три типа контейнеров – вектор (vector) и список (list). (Третий последовательный контейнер – двусторонняя очередь (deque а третий он для чего ? и как его использовать ?
C++ Напишите рекурсивную подпрограмму вычисления суммы целых чисел от 1 до n (1+2+3+…+n) Есть такие две задачки... К сожалению в с++ вообще не шарю... в бейсике еще как-то плаваю..., а задачки решить надо... помогите.. 1. Построить СА определения целой степени у числа х (учесть, что степень может быть отрицательной). 2. Напишите рекурсивную подпрограмму вычисления суммы целых чисел от 1 до n (1+2+3+…+n). Заранее благодарен. http://www.cyberforum.ru/cpp-beginners/thread396945.html
C++ Задача на указатели.Указатель на указатель.
Таблица футбольного чемпионата задана квадратной матрицей порядка n, в которой все элементы, принадлежащие главной диагонали равны 0, а каждый элемент, не принадлежащий главной диагонали, равен 2, 1 или 0 (число очков набранных в игре: 2 – выигрыш, 1 – ничья, 0 – проигрыш). а) найти число команд, имеющих больше побед, чем поражений; б) определить номера команд, прошедших чемпионат без...
C++ Проблемки с классом
// mamalclass.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <conio.h> class shape {
C++ Поменять местами первую строку и строку, в которой находится первый нулевой элемент. Принять, что массив просматривается слева направо и сверху вниз. http://www.cyberforum.ru/cpp-beginners/thread396909.html
Поменять местами первую строку и строку, в которой находится первый нулевой элемент. Принять, что массив просматривается слева направо и сверху вниз.Помогите кто чем может,
C++ Определить сумму отрицательных чисел в памяти с адреса 0х60 по 0х67. Попросили сделать лабу C++ для одного человека и так вышло, что не могу отказать. Определить сумму отрицательных чисел в памяти с адреса 0х60 по 0х67. Результат записать по адресу 0х70 если он больше 13 (я так понял по модулю раз все отрицательные?), иначе по 0х77. Я не понимаю как получать доступ непосредственно к ячейкам памяти, при чем не понятно сколько байт занимает число которое там... подробнее

Показать сообщение отдельно
Arkanoid
10 / 10 / 0
Регистрация: 10.07.2011
Сообщений: 75
02.12.2011, 00:42     Ошибка в создании абстрактного класса
есть абстрактный класс ID3DXAllocateHierarchy, на его основе создан класс CAllocateHierarchy:

C++
1
2
3
4
5
6
7
8
9
10
11
class CAllocateHierarchy: public ID3DXAllocateHierarchy
{
public:
STDMETHOD(CreateFrame)(THIS_ LPCTSTR Name, LPD3DXFRAME *ppNewFrame);
STDMETHOD(CreateMeshContainer)(THIS_ LPCTSTR Name, 
        LPD3DXMESHDATA pMeshData, LPD3DXMATERIAL pMaterials, 
        LPD3DXEFFECTINSTANCE pEffectInstances, DWORD NumMaterials, 
        DWORD *pAdjacency, LPD3DXSKININFO pSkinInfo, LPD3DXMESHCONTAINER *ppNewMeshContainer);
STDMETHOD(DestroyFrame)(THIS_ LPD3DXFRAME pFrameToFree);
STDMETHOD(DestroyMeshContainer)(THIS_ LPD3DXMESHCONTAINER pMeshContainerBase);
};
вот описание функций:

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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
HRESULT CAllocateHierarchy::CreateFrame(LPCWSTR Name, LPD3DXFRAME *ppNewFrame)
{    
LPFRAME pFrame = new FRAME;
ZeroMemory(pFrame, sizeof(FRAME));
*ppNewFrame = NULL;
if(Name)
    {
        int nNameSize = strlen(Name)+1;
        pFrame->Name = new char[nNameSize];
        memcpy(pFrame->Name, NULL, nNameSize*sizeof(char));
    }
    else
        pFrame->Name = NULL;
    
           pFrame->pFrameFirstChild = NULL;
    pFrame->pFrameSibling = NULL;
    pFrame->pMeshContainer = NULL;
    D3DXMatrixIdentity(&pFrame->matCombined);
    D3DXMatrixIdentity(&pFrame->TransformationMatrix);
 
    *ppNewFrame = (LPD3DXFRAME)pFrame;
 
    pFrame = NULL;
 
    return S_OK;
}
 
HRESULT CAllocateHierarchy::CreateMeshContainer(LPCTSTR Name, 
    LPD3DXMESHDATA pMeshData, LPD3DXMATERIAL pMaterials, 
    LPD3DXEFFECTINSTANCE pEffectInstances, DWORD NumMaterials, 
    DWORD *pAdjacency, LPD3DXSKININFO pSkinInfo, LPD3DXMESHCONTAINER *ppNewMeshContainer) 
{
LPMESHCONTAINER pMeshContainer = new MESHCONTAINER;
    ZeroMemory(pMeshContainer, sizeof(MESHCONTAINER));
 
    *ppNewMeshContainer = NULL;
 
    if(Name)
    {
        int nNameSize = strlen(Name)+1;
        pMeshContainer->Name = new char[nNameSize];
        memcpy(pMeshContainer->Name, Name, nNameSize*sizeof(char));
    }
    else
        pMeshContainer->Name = NULL;
 
    pMeshContainer->MeshData.Type = D3DXMESHTYPE_MESH;
    DWORD dwFaces = pMeshData->pMesh->GetNumFaces();
           pMeshContainer->NumMaterials = NumMaterials;
           pMeshContainer->pMaterials9 = new D3DMATERIAL9[pMeshContainer->NumMaterials];
           pMeshContainer->pAdjacency = new DWORD[dwFaces*3];
    memcpy(pMeshContainer->pAdjacency, pAdjacency, sizeof(DWORD) * dwFaces*3);
           LPDIRECT3DDEVICE9 pd3dDevice = NULL;// Direct3D Rendering device
    pMeshData->pMesh->GetDevice(&pd3dDevice);
 
    pMeshData->pMesh->CloneMeshFVF(D3DXMESH_MANAGED, 
        pMeshData->pMesh->GetFVF(), pd3dDevice, 
        &pMeshContainer->MeshData.pMesh);
    
    pMeshContainer->ppTextures  = new LPDIRECT3DTEXTURE9[NumMaterials];
    for(DWORD dw = 0; dw < NumMaterials; ++dw)
    {
        pMeshContainer->ppTextures [dw] = NULL;
 
        if(pMaterials[dw].pTextureFilename && strlen(pMaterials[dw].pTextureFilename) > 0)
        {
            if(FAILED(D3DXCreateTextureFromFile(pd3dDevice, 
                LPCWSTR(pMaterials[dw].pTextureFilename), &pMeshContainer->ppTextures[dw])))
                    pMeshContainer->ppTextures [dw] = NULL;
        }
    }
    
    pd3dDevice->Release();
 
    if(pSkinInfo)
    {
        
        pMeshContainer->pSkinInfo = pSkinInfo;
        pSkinInfo->AddRef();
 
 
        UINT uBones = pSkinInfo->GetNumBones();
        pMeshContainer->pBoneOffsets = new D3DXMATRIX[uBones];
 
        
        pMeshContainer->ppFrameMatrices = new D3DXMATRIX*[uBones];
 
    
        for (UINT i = 0; i < uBones; i++)
            pMeshContainer->pBoneOffsets[i] = *(pMeshContainer->pSkinInfo->GetBoneOffsetMatrix(i));
    }
    else
    
    {
        pMeshContainer->pSkinInfo = NULL;
        pMeshContainer->pBoneOffsets = NULL;
        pMeshContainer->pSkinMesh = NULL;
        pMeshContainer->ppFrameMatrices = NULL;
    }
 
    pMeshContainer->pMaterials = NULL;
    pMeshContainer->pEffects = NULL;
 
    //pMeshContainer->MeshData.pMesh->OptimizeInplace(
    //  D3DXMESHOPT_VERTEXCACHE|D3DXMESHOPT_COMPACT|D3DXMESHOPT_ATTRSORT,
    //  pMeshContainer->pAdjacency,NULL,NULL,NULL);
 
    // Set the output mesh container to the temp one
    *ppNewMeshContainer = pMeshContainer;
    pMeshContainer = NULL;
 
    // Returns an HRESULT so give it the AOk result
    return S_OK;
}
 
HRESULT CAllocateHierarchy::DestroyFrame(LPD3DXFRAME pFrameToFree) 
{
    
    LPFRAME pFrame = (LPFRAME)pFrameToFree;
 
    
    SAFE_DELETE_ARRAY(pFrame->Name)
    
    
    SAFE_DELETE(pFrame)
 
    
    return S_OK; 
}
 
HRESULT CAllocateHierarchy::DestroyMeshContainer(LPD3DXMESHCONTAINER pMeshContainerBase)
{
    
    LPMESHCONTAINER pMeshContainer = (LPMESHCONTAINER)pMeshContainerBase;
    
 
    SAFE_DELETE_ARRAY(pMeshContainer->Name)
 
    
    SAFE_DELETE_ARRAY(pMeshContainer->pMaterials9)
 
    
    if(pMeshContainer->ppTextures)
        for(UINT i = 0; i < pMeshContainer->NumMaterials; ++i)
                SAFE_RELEASE(pMeshContainer->ppTextures[i]);
 
    
    SAFE_DELETE_ARRAY(pMeshContainer->ppTextures)
 
    
    SAFE_DELETE_ARRAY(pMeshContainer->pAdjacency) 
    
    
    SAFE_DELETE_ARRAY(pMeshContainer->pBoneOffsets)
    
    
    SAFE_DELETE_ARRAY(pMeshContainer->ppFrameMatrices)
    
    SAFE_DELETE_ARRAY(pMeshContainer->pAttributeTable)
    
 
    SAFE_RELEASE(pMeshContainer->pSkinMesh)
    
    
    SAFE_RELEASE(pMeshContainer->MeshData.pMesh)
    
    
    SAFE_RELEASE(pMeshContainer->pSkinInfo)
    
    
    SAFE_DELETE(pMeshContainer)
    
    
    return S_OK;
}
Если в функции main обьявить
CAllocateHierarchy Alloc;
То пишет невозможно создать экземпляр абстрактного класса, но ведь по идее этот класс уже не должен быть абстрактным, в чем причина ошибки?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru