如果我有这种结构:
namespace A
{
template <Class T>
struct Point
{
Point<T>(T x_, T y_) : x(x_), y(y_) {}
Point<T>() : x(0), y(0) {}
T x;
T y;
}
}
我如何定义Point结构中的对象?
我试过了:
A::Point point;
但它不起作用。
答案 0 :(得分:5)
即:
A::Point<int> point;
A::Point<int> point(1,1);
但首先修复错误(注意“类”和缺少分号的情况):
namespace A
{
template <class T>
struct Point
{
Point<T>(T x_, T y_) : x(x_), y(y_) {}
Point<T>() : x(0), y(0) {}
T x;
T y;
};
}
答案 1 :(得分:2)
这里似乎有一些语法错误。如果您将代码更正为:
namespace A
{
template <class T> // Class is lowercase
struct Point
{
Point(T x_, T y_) : x(x_), y(y_) {} // No need for <T>
Point() : x(0), y(0) {} // No need for <T>
T x;
T y;
}; // Semi colon
}
然后:
A::Point<int> point;
有效。你需要告诉它模板参数是什么,在这种情况下无法自动推断它。
答案 2 :(得分:1)
在实例化结构时必须指定template argument,例如:
A::Point<double> point;
答案 3 :(得分:0)
A::Point<int> point;
或A::Point<float> point;
- 您需要指定要专门化的类型。否则,编译器将如何知道T
是哪种类型?
答案 4 :(得分:0)
首先,您需要在struct Point
的定义后添加分号。声明类型为A::Point<int>
的实例:
A::Point<int> point;