C++ 如何定义模板化类类型的对象?

C++ 如何定义模板化类类型的对象?,c++,C++,如果我有这种结构: 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; } } 但它不起作用。A::Point或A::Point-您需要指定要专门化的类型。否则,

如果我有这种结构:

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;
    }
}
但它不起作用。

A::Point
A::Point-您需要指定要专门化的类型。否则,编译器如何知道
T
是哪种类型?

A::Point
A::Point-您需要指定要专门化的类型。否则,编译器如何知道
T
是哪种类型?

在实例化结构时,必须指定类型,例如:

A::Point<double> point;
A::Point;
在实例化结构时,您必须指定,例如:

A::Point<double> point;
A::Point;
即:

 A::Point<int> point;
 A::Point<int> point(1,1);
A::Point;
A:点(1,1);
但首先修复错误(注意“class”的大小写和缺少分号):

名称空间A
{
模板
结构点
{
点(tx_u,tyuu):x(x_u),y(y_u){
点():x(0),y(0){}
tx;
T y;
};
}
即:

 A::Point<int> point;
 A::Point<int> point(1,1);
A::Point;
A:点(1,1);
但首先修复错误(注意“class”的大小写和缺少分号):

名称空间A
{
模板
结构点
{
点(tx_u,tyuu):x(x_u),y(y_u){
点():x(0),y(0){}
tx;
T y;
};
}

这里似乎有一些语法错误。如果将代码更正为:

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
{
模板//类是小写的
结构点
{
点(tx_u,tyuu):x(x_u),y(y_u){}//不需要
点():x(0),y(0){}//不需要
tx;
T y;
};//分号
}
然后:

A::Point


这是有效的。您需要告诉它模板参数是什么,但在这种情况下无法自动推断它。

这里似乎有一些语法错误。如果将代码更正为:

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
{
模板//类是小写的
结构点
{
点(tx_u,tyuu):x(x_u),y(y_u){}//不需要
点():x(0),y(0){}//不需要
tx;
T y;
};//分号
}
然后:

A::Point


这是有效的。您需要告诉它模板参数是什么,但在这种情况下无法自动推断它。

首先,您需要在
结构点的定义后添加分号。要声明类型为
A::Point
的实例,请执行以下操作:

A::Point;

首先,您需要在
结构点的定义后添加分号。要声明类型为
A::Point
的实例,请执行以下操作:

A::Point;

不要含糊其辞,做个王牌;学习编写适当的测试用例!“不起作用”不是一个错误的描述。不要含糊其辞,做一个王牌;学习编写适当的测试用例!“不起作用”不是一个错误描述。D'oh比我快了29秒!但是,在您的第一行中有一个错误的)名称空间结尾后的分号不需要Edd'oh比我快29秒!但是,在第一行中有一个错误的符号。名称空间末尾的分号不需要作为一般样式点。对于这样的使用,在ctor中使用const t&x_u,const t&y_u可能是一个好习惯。作为一般样式点,在ctor中使用const t&x_u,const t&y_u可能是一个好习惯。