我很难打印功能模板内使用的类中存在的字符串值。 以下是代码
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
using namespace std;
template <typename T>
class Test1{
public:
int val1 = 10;
string val2 = "hello";
};
class Test2{
public:
int val1 = 20;
string val2 = "hai";
};
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;
};
int main(int argc, char** argv) {
Test2 *new_val;
Queue *data;
data->append(new_val);
return 0;
}
任何人都可以指出错误以及如何执行此操作以在函数模板中打印各种类的字符串。
答案 0 :(得分:1)
注意:写作时
kernel()
您将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
观察到我也已经转换了对象中的指针。 建议:避免使用指针,直到您清楚使用它们为止。