Внимание: когда вы пишете
template <typename T>
class Test1{
public:
int val1 = 10;
string val2 = "hello";
};
class Test2{
public:
int val1 = 20;
string val2 = "hai";
};
// ...
, вы определяете Test1
как класс шаблона, Test2
и следующие классы как обычные (не шаблонные) классы.
Итак,когда вы пишете
class Queue{
public:
void append(T & item)
{
{
std::lock_guard<std::mutex> lock(mutex);
cout<<"string to be added "<<item->val2;
mQueue.push_back(item);
}
}
private:
std::vector<T> mQueue;
};
, компилятор не знает, что такое T
, потому что T
является параметром шаблона Test1
.
Полагаю, вам нужен шаблон Queue
template <typename T>
class Queue{
// ...
};
// ...
Test2 new_val;
Queue<Test2> data;
data.append(new_val);
Заметьте, что я также трансформировал указатели в объекте.Предложение: избегайте указателей, пока они вам не станут понятны.