2010-10-29 3 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'oh избил меня до 29 секунд! В вашей первой строке все равно). – Flexo

+0

Отлично! Благодаря! Оно работает! – olidev

+0

@awoodland thanks :) – sinek

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

Как общая точка стиля, вероятно, хорошая привычка использовать const T & x_, const T & y_ в ctor для таких целей. – Flexo

0

Для начала вам нужно добавить точку с запятой после определения struct Point. Объявить экземпляр типа A::Point<int>:

A::Point<int> point; 
Смежные вопросы