ПрограммированиеФорумГрафика

Ошибка компиляции

#0
21:28, 18 авг 2009

Всем привет

Я бы сюда не написал, если бы это не было так важно
А ошибка вот в чем: написал я класс для работы с вершинным буфером, класс для вершины, класс динамического массива. Функции класса динамического массива нельзя использовать в классе буфера вершин - как убрать эту ошибку?

при компиляции выдает ошибки:

Linking...
veVertexBuffer.obj : error LNK2001: unresolved external symbol "public: __thiscall veArray<class veVertex>::veArray<class veVertex>(void)" (??0?$veArray@VveVertex@@@@QAE@XZ)
veVertexBuffer.obj : error LNK2001: unresolved external symbol "public: __thiscall veArray<class veVertex>::~veArray<class veVertex>(void)" (??1?$veArray@VveVertex@@@@QAE@XZ)
veVertexBuffer.obj : error LNK2001: unresolved external symbol "public: class veVertex * __thiscall veArray<class veVertex>::GetArray(void)" (?GetArray@?$veArray@VveVertex@@@@QAEPAVveVertex@@XZ)
veVertexBuffer.obj : error LNK2001: unresolved external symbol "public: int __thiscall veArray<class veVertex>::GetLenght(void)" (?GetLenght@?$veArray@VveVertex@@@@QAEHXZ)
veVertexBuffer.obj : error LNK2001: unresolved external symbol "public: void __thiscall veArray<class veVertex>::AddToEnd(class veVertex)" (?AddToEnd@?$veArray@VveVertex@@@@QAEXVveVertex@@@Z)
veVertexBuffer.obj : error LNK2001: unresolved external symbol "public: void __thiscall veArray<class veVertex>::Release(void)" (?Release@?$veArray@VveVertex@@@@QAEXXZ)
fatal error LNK1120: 6 unresolved externals
Error executing link.exe.

Все перечисленные выше функции использовались в классе буфера вершин

код классов:

#ifndef _veArray_h_
#define _veArray_h_

template<class T>
class veArray
{
private:
  T* pArray;
  int iLenght;
  int iCursor;

public:
  veArray();
  veArray(int iSize);
  ~veArray();
  
  void Expand(int iSize);
  void AddToBegin(T Value);
  void AddToMiddle(int iNum,T Value);
  void AddToEnd(T Value);
  void AddGroup(int iNumStart,int iCount,T Value);
  void DeleteToBegin();
  void DeleteToMiddle(int iNum);
  void DeleteToEnd();
  void DeleteGroup(int iNumStart,int iCount);

  void SetLenght(int iSize);
  void SetValue(T Value);
  void SetElementValue(int iNum,T Value);
  void SetGroupElementValue(int iNumStart,int iCount,T Value);

  T* GetArray();
  T GetValue(int iNum);
  T GetValueToBeginElement();
  T GetValueToEndElement();
  int GetLenght();
  int GetCursor();

  T& operator[](int i);

  void Release();
};

#endif//_veArray_h_
#ifndef _veVertex_h_
#define _veVertex_h_

#define VEVERTEX_FVF (D3DFVF_XYZRHW,D3DFVF_DIFFUSE)

class veVertex
{
private:
  float m_fX,m_fY,m_fZ,m_fRHW;
  unsigned long m_dwDiffuseColor;

public:
  veVertex();
  veVertex(float x,float y,float z,float rhw,unsigned long color);
  ~veVertex();
};

#endif//_veVertex_h_
#ifndef _veVertexBuffer_h_
#define _veVertexBuffer_h_

#include "veGraphics.h"
#include "veVertex.h"
#include "veArray.h"

class veVertexBuffer
{
private:
  IDirect3DVertexBuffer9 *m_pDirect3DVertexBuffer;
  veArray<veVertex> m_VertexArray; //<<<<<-------
  void* m_pVertexBuffer;

  veGraphics *m_pGraphics;

public:
  veVertexBuffer();
  veVertexBuffer(veGraphics *pGraphics);
  ~veVertexBuffer();

  void CreateVertexBuffer();
  void Render();
  void AddVertex(veVertex vertex);

  void Shutdown();
};

#endif//_veVertexBuffer_h_

пробовал инкапсюляцей - нечего не дало
вместо veArray стл можете не предлагать...
жду ответов...

#1
21:39, 18 авг 2009

реализации функций шаблоны должны быть доступны компилятору при компиляции модуля, в котором используются.

#2
21:43, 18 авг 2009

хм, так что делать то? =)

#3
21:43, 18 авг 2009

ragnaros-alex
>при компиляции выдает ошибки:
>Linking...
Здесь нужно учить, что такое компилятор и что такое линкер. За D3D рановато еще браться.

> LNK2001
Если ввести это в строку поиска на msdn.microsoft.com, то можно узнать, что же это за ошибка такая.

Ах, ну да, еще в http://www.gamedev.ru/faq/  стоит заглянуть.

#4
21:44, 18 авг 2009

там разве недоступны?

#5
21:44, 18 авг 2009

Wraith
большое спс, ноя знаю что такое компилятор

#6
21:47, 18 авг 2009

ragnaros-alex
>большое спс, ноя знаю что такое компилятор
Ну вот осталось только узнать, что такое линкер.

#7
21:48, 18 авг 2009

ragnaros-alex
лучше файлики выложи, да и потом даже у меня вроде и шаблоны компилятся хотя я нуб нубом.

а так первая мысль чего-то ты не доподключил.


З.Ы. не пинать.

#8
22:03, 18 авг 2009

где лежит реализация методов veArray? положи её в ту же хедер, что и декларацию и всё заработает (если нет других ошибок)

#9
22:27, 18 авг 2009

ragnaros-alex
Этот вопрос всплывает с завидной регулярностью.
Въ FAQ

#10
13:16, 21 авг 2009

вылысыпыдысты такие вылысыпыдысты...

ПрограммированиеФорумГрафика

Тема в архиве.