kotlomoy

Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ValidolX Я хочу скомпилировать эту строку. Писать ничего пока не хочу, это исходник XMoto. В gcc собирается, в студии - нет. ЗЫ. Проблема с шаблонной функцией, которая возвращает указатель на шаблонную структуру. ЗЫЫ.Код. Collision.h: Код: template<class T> struct ColElement { T* id; /* in order to remove efficiently an element from the grid, we need to know in which cells it is */ /* if gridCells.size() == 0, then it means that the element is not in the level boundaries (moved out by a script for example) */ std::vector<int> gridCells; /* as an element can be in more than one cell, we need to tell if an element has already be visited */ int curCheck; }; template<class T> class ElementHandler { public: typedef struct { std::vector<struct ColElement<T>*> ColElements; } GridCell; /* The element must have a method getAABB() */ struct ColElement<T>* addElement(T* id); void removeElement(T* id); void moveElement(T* id); void moveElement(struct ColElement<T>* pColElem); std::vector<T*>& getElementsNearPosition(AABB& BBox); ElementHandler(){ m_pGrid = NULL; m_bDebugFlag = false; m_curCheck = 0; reset(); } void reset(); void setDims(Vector2f min, Vector2f max, int gridWidth, int gridHeight, float Xoffset=1.0, float Yoffset=1.0); void setDebug(bool b) { m_bDebugFlag = b; } std::vector<T*>& getCheckedElements() { return m_CheckedElements; } private: std::vector<struct ColElement<T>*> m_ColElements; /* level dimensions */ Vector2f m_min, m_max; /* grid dimensions */ int m_gridWidth, m_gridHeight; /* grid for the elements */ GridCell* m_pGrid; /* The current checking pass */ int m_curCheck; bool m_bDebugFlag; std::vector<T*> m_CheckedElements; // the vector returned by getElementsNearPosition std::vector<T*> m_returnedElements; /* helpers */ struct ColElement<T>* _getColElement(T* id); void _addColElementInCells(struct ColElement<T>* pColElem); struct ColElement<T>* _getAndRemoveColElement(T* id); void _removeColElementFromCells(struct ColElement<T>* pColElem); // precalculated values float m_widthDivisor; float m_heightDivisor; }; | Collision.cpp: Код: template <class T> struct ColElement<T>* ElementHandler<T>::addElement(T* id) { struct ColElement<T>* pNewElem = new struct ColElement<T>; pNewElem->id = id; m_ColElements.push_back(pNewElem); _addColElementInCells(pNewElem); return pNewElem; } | Проблема в определении функции ElementHandler<T>::addElement(T* id) | Всего записей: 172 | Зарегистр. 06-03-2008 | Отправлено: 22:29 09-02-2011 | Исправлено: kotlomoy, 22:34 09-02-2011 |
|