Указатель на класс шаблона - PullRequest
3 голосов
/ 08 января 2020

Я написал простой шаблонный класс, который отлично работает, если объекты создаются без использования указателей. Однако, если мне нужно создать указатель на этот объект класса, я получу error: invalid conversion from ‘int’ to ‘Logger<int>*’ [-fpermissive]. Я прилагаю код ниже. Любая помощь приветствуется. Спасибо.

#include <iostream>
using namespace std;

template<typename T>
class Logger
{
    public:
        Logger (const T& d) {data = d;}
        void print(){std::cout << "data: " << data << std::endl;}
    private:
        int data;
};


int main() {
    /*
    // Works
    Logger<int> myLogger(5);
    myLogger.print();
    */

    Logger<int>* myLogger(5);
    myLogger->print();
    return 0;
}

1 Ответ

3 голосов
/ 08 января 2020

Если вы хотите выделить указатель, вам нужно будет использовать new (и помните delete, когда он больше не нужен, чтобы не пропускать его).

Logger<int>* myLogger = new Logger<int>(5);

Я не знаю, каков ваш вариант использования для этого, но если вам действительно нужно динамически выделить объект, я бы порекомендовал использовать умные указатели, если вы можете.

std::unique_ptr<Logger<int>> myLogger = std::make_unique<Logger<int>>(5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...