ciao.
ho questa classe tuple:
.h
[code]
#pragma once
template<typename TYPE, int SIZE> class CVar
{
public:
CVar(void){};
~CVar(void){};
bool operator ==(const CVar& var)const;
bool operator != (const CVar& var)const;
void operator =(const CVar& var)const;
bool operator >(const CVar& var)const;
bool operator <(const CVar& var)const;
bool operator >=(const CVar& var)const;
bool operator <=(const CVar& var)const;
TYPE mVar[SIZE];
};
[code]
e cpp:
eredito per creare un float4:codice:#include "StdAfx.h" #include "Var.h" // template<typename TYPE, int SIZE> bool CVar<TYPE, SIZE>::operator== (const CVar&)const { return memcmp(mVar, CVar.mVar, SIZE*sizeof(TYPE)) == 0; } template<typename TYPE, int SIZE> bool CVar<TYPE, SIZE>::operator!= (const CVar&)const { return memcmp(mVar, CVar.mVar, SIZE*sizeof(TYPE)) != 0; } template<typename TYPE, int SIZE> bool CVar<TYPE, SIZE>::operator> (const CVar&)const { return memcmp(mVar, CVar.mVar, SIZE*sizeof(TYPE)) > 0; } template<typename TYPE, int SIZE> bool CVar<TYPE, SIZE>::operator< (const CVar&)const { return memcmp(mVar, CVar.mVar, SIZE*sizeof(TYPE)) < 0; } template<typename TYPE, int SIZE> bool CVar<TYPE, SIZE>::operator>= (const CVar&)const { return memcmp(mVar, CVar.mVar, SIZE*sizeof(TYPE)) >= 0; } template<typename TYPE, int SIZE> bool CVar<TYPE, SIZE>::operator<= (const CVar&)const { return memcmp(mVar, CVar.mVar, SIZE*sizeof(TYPE)) <= 0; } template<typename TYPE, int SIZE> void CVar<TYPE, SIZE>::operator= (const CVar&)const { memcpy((void*)mVar.mVar, (void*)CVar.mVar, SIZE*sizeof(TYPE)); }
.h
ecodice:#pragma once #include "Var.h" class Float4 : public CVar<float, 4> { public: Float4(void); Float4(float f1, float f2, float f3, float f4); Float4 (const Float4& var); void SetValue(float f1, float f2, float f3, float f4); ~Float4(void); };
cpp
codice:#include "StdAfx.h" #include "Float4.h" Float4::Float4(void) { } Float4::Float4(float f1, float f2 ,float f3 , float f4) { mVar[0] = f1; mVar[1] = f2; mVar[2] = f3; mVar[3] = f4; } Float4::Float4 (const Float4& var) { mVar[0] = var.mVar[0]; mVar[1] = var.mVar[1]; mVar[2] = var.mVar[2]; mVar[3] = var.mVar[3]; } Float4::~Float4(void) { } void Float4::SetValue(float f1, float f2, float f3, float f4) { mVar[0] = f1; mVar[1] = f2; mVar[2] = f3; mVar[3] = f4; }
se la compilo nel progetto in cui è una dll c++ non da nessun errore e cosi' se le includo in altre librerie statiche .lib o dll.
Il problema è che quando le inserisco in un progetto che è un applicazione win32 il linker mi da questi errori:
1>Linking...
1>Application.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:ICF' specification
1>WinApplication.obj : error LNK2019: unresolved external symbol "public: __thiscall Float4::~Float4(void)" (??1Float4@@QAE@XZ) referenced in function "public: __thiscall PGE::CWinApplication::CWinApplication(int,int,int, int,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class Float4)" (??0CWinApplication@PGE@@QAE@HHHHV?$basic_string@_ WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@VF loat4@@@Z)
1>WindowApplication.obj : error LNK2001: unresolved external symbol "public: __thiscall Float4::~Float4(void)" (??1Float4@@QAE@XZ)
1>WinApplication.obj : error LNK2019: unresolved external symbol "public: __thiscall Float4::Float4(class Float4 const &)" (??0Float4@@QAE@ABV0@@Z) referenced in function "public: __thiscall PGE::CWinApplication::CWinApplication(int,int,int, int,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class Float4)" (??0CWinApplication@PGE@@QAE@HHHHV?$basic_string@_ WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@VF loat4@@@Z)
1>WindowApplication.obj : error LNK2001: unresolved external symbol "public: __thiscall Float4::Float4(class Float4 const &)" (??0Float4@@QAE@ABV0@@Z)
1>WinApplication.obj : error LNK2019: unresolved external symbol "public: __thiscall Float4::Float4(void)" (??0Float4@@QAE@XZ) referenced in function "public: __thiscall PGE::CWindowApplication::CWindowApplication(void)" (??0CWindowApplication@PGE@@QAE@XZ)
1>WindowApplication.obj : error LNK2019: unresolved external symbol _D3D11CreateDeviceAndSwapChain@48 referenced in function "public: long __thiscall PGE::CWindowApplication::InitDevice(void)" (?InitDevice@CWindowApplication@PGE@@QAEJXZ)
1>C:\PGN\trunk\PGE\Debug\PGEApplication.exe : fatal error LNK1120: 4 unresolved externals
1>Build log was saved at "file://c:\PGN\trunk\PGEApplication\Debug\BuildLog.htm"
1>PGEApplication - 7 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
premetto che ho cercato a lungo una soluzione.
grazie.
ps. devo trovare soluzione solo agli errori del linker per i float4 , gli altri errori li ho messi a posto.

Rispondi quotando