2010-10-29 56 views
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; 
    } 
} 

會如何我定義了從點結構的對象?

我想:

A::Point point; 

,但它不工作。

+2

不要模糊,成爲一個王牌;學會寫一個適當的測試用例! http://sscce.org/ http://www.xs4all.nl/~weegen/eelis/iso-c++/testcase.xhtml http://tinyurl.com/so-hints「不工作」是*不*一個錯誤描述。 – 2010-10-29 09:24:12

回答

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

D'噢,29秒之內擊敗了我!儘管你的第一行有一個流浪。 – Flexo 2010-10-29 09:25:18

+0

太棒了!謝謝!有用! – olidev 2010-10-29 09:26:43

+0

@awoodland謝謝:) – sinek 2010-10-29 09:27:51

0

A::Point<int> point;例如,或A::Point<float> point; - 您需要指定要專門處理的類型。否則,編譯器將如何知道哪種類型的T是?

1

你有實例化的結構,例如,當指定template argument

A::Point<double> point; 
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;

是有效的。你需要告訴它模板參數是什麼,在這種情況下無法自動推斷出它。

+0

作爲一般的風格點,在ctor中使用const T&x_,const T&y_可能是一個很好的習慣。 – Flexo 2010-10-29 09:30:15

0

首先,您需要在struct Point的定義之後添加分號。申報類型的實例:A::Point<int>

A::Point<int> point;