我想了解模板如何工作。到目前爲止,我閱讀了大量關於這個主題的文獻,但我仍然有很多問題。訪問模板類型實例成員
我不明白爲什麼這個代碼不編譯:
#include <iostream>
using std::cout;
using std::endl;
struct SimpleVertex
{
float x, y, z;
float r, g, b, a;
};
struct TexturedVertex
{
float x, y, z;
float u, v;
};
// Template class declaration
template<class T>
class Primitive
{
public:
Primitive(const T& vertex)
{
cout << "Usual constructor" << endl;
};
~Primitive();
};
// Template function
template<class T>
void printVertex (const T& vertex)
{
cout << "Printing r, g, b, a" << endl;
cout << vertex.r << " " << vertex.g << " " << vertex.b << " " << vertex.a;
}
int main()
{
SimpleVertex simple;
simple.r = 264;
simple.g = 123;
simple.b = 731;
simple.a = 0;
Primitive<SimpleVertex> prim(simple);
//printVertex<SimpleVertex>(simple);
system("pause");
return 0;
}
我的編譯器是從MSVS2012 IDE。當我打電話Primitive<SimpleVertex> prim(simple)
行 - 它不起作用,並拋出一個錯誤:Source.obj : error LNK2019: unresolved external symbol "public: __thiscall Primitive<struct SimpleVertex>::~Primitive<struct SimpleVertex>(void)" ([email protected]@@@@[email protected]) referenced in function _main
,但是當我打電話printVertex<SimpleVertex>(simple)
而不是 - 一切工作正常。
所以我不知道調用簡單模板函數和調用templade類構造函數有什麼區別?
此外,我不明白爲什麼我不能訪問Primitive的構造函數中SimpleVertex的成員(r,g,b,a),但可以在單獨的模板函數中做到這一點。
呀,謝謝你。我討厭我注意力不集中=( – GuardianX