【发布时间】:2020-01-08 20:41:16
【问题描述】:
我写了一个简单的模板类,如果对象是在不使用指针的情况下创建的,它可以正常工作。但是,如果我需要创建一个指向该类对象的指针,我会得到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;
}
【问题讨论】:
-
那是因为它只是一个指向记录器对象的指针,而不是某个对象本身。你必须这样做
Logger<int> *myLogger = new myLogger(5);(请不要这样做,手动内存管理很糟糕。使用 std::unique_ptr)。 -
@Geek -- C++ 不是 Java。无需使用
new创建对象。 -
这不是模板独有的。我认为您在 C++ 书中可能跳得太远了。