使用类指针打印功能模板的内容

时间:2019-02-19 12:26:02

标签: c++ templates

我很难打印功能模板内使用的类中存在的字符串值。 以下是代码

#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;
    }

任何人都可以指出错误以及如何执行此操作以在函数模板中打印各种类的字符串。

1 个答案:

答案 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; }; 是什么,因为TT的模板参数。

我想您需要模板Test1

Queue

观察到我也已经转换了对象中的指针。 建议:避免使用指针,直到您清楚使用它们为止。