Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> определение функций шаблонных классов 
V
    Опции темы
nanotexnik
Дата 22.3.2013, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



есть определенние шаблоного класса:

Код

        template<class T>
    class Vector2D
    {
    public:
        T mX;
        T mY;
        Vector2D(const T &x, const T &y);
        Vector2D &operator+(const Vector2D<T> &);
    };


Пытаюсь определить конструктор и оператор +, следующим образом:        
Код

        template<class T> 
    Vector2D<T>::Vector2D(T x, T y)
    {
        mX = x;
        mY = y;
    }

    template<class T> 
    Vector2D<T> &Vector2D<T>::operator+(Vector2D<T> &t)
    {
        mX += t.mX;
        mY += t.mY;
                return this;
    }


Получаю ошибки следующего рода: 
Цитата
Error    1    error C2244: 'Vector2D<T>::Vector2D' : unable to match function definition to an existing declaration    c:\users\nano\documents\visual studio 2010\projects\test2\actualvector\vector2d.cpp    10 


В чем может быть проблема?

Модератор: пожалуйста используй в следующий раз тег [ quote ] для цитирования сообщений компилятора.
PM MAIL   Вверх
azesmcar
Дата 22.3.2013, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



А почему пропустил ключевое слово const в определениях?
Код

template<class T>
class Vector2D
{
public:
   T mX;
   T mY;

   Vector2D(const T &x, const T &y);
   Vector2D &operator+(const Vector2D<T> &);
};

template<class T> 
Vector2D<T>::Vector2D(const T &x, const T &y)
{
   mX = x;
   mY = y;
}

template<class T> 
Vector2D<T> &Vector2D<T>::operator+(const Vector2D<T> &t)
{
   mX += t.mX;
   mY += t.mY;
   return this;
}


P.S.
В конструкторе лучше использовать список инициализации
Код

template<class T> 
Vector2D<T>::Vector2D(const T &x, const T &y)
   : mX(x), mY(y)
{
}

PM   Вверх
nanotexnik
Дата 22.3.2013, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



спасибо, ошибка по невнимательности...

теперь вернулся к другой ошибке, значение которой я не понимаю

Цитата
Error    1    error LNK2019: unresolved external symbol "public: __thiscall Vector2D<int>::Vector2D<int>(int const &,int const &)" (??0?$Vector2D@H@@QAE@ABH0@Z) referenced in function _main    C:\Users\nano\Documents\Visual Studio 2010\Projects\Test2\ActualVector\main.obj


Создание объектов происходит следующим образом:
Код

int main()
{
    Vector2D<int> vector(3,2);
    Vector2D<int> vector2(4,5);
    std::cout << "size:" << sizeof(vector) << std::endl;
    std::cout << "size2:" << sizeof(vector2) << std::endl;    
    return 0;
}


Это сообщение отредактировал(а) nanotexnik - 22.3.2013, 18:36
PM MAIL   Вверх
azesmcar
Дата 22.3.2013, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Не скажу, что я не ждал этого вопроса smile

Перенеси определения функций в заголовочный файл. С шаблонами по другому никак.
Код

template<class T>
class Vector2D
{
public:
   T mX;
   T mY;
   Vector2D(const T &x, const T &y): mX(x), mY(y) {};
   Vector2D &operator+(const Vector2D<T> &)
   {
      mX += t.mX;
      mY += t.mY;
      return this;
   };
};


подробнее тут.
еще подробнее - google


Это сообщение отредактировал(а) azesmcar - 22.3.2013, 18:21
PM   Вверх
nanotexnik
Дата 22.3.2013, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Жаль, что нельзя. В своем справочнике по С++ ничего не нашел по данному поводу smile 

Спасибо.

Это сообщение отредактировал(а) nanotexnik - 22.3.2013, 18:24
PM MAIL   Вверх
volatile
Дата 22.3.2013, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(nanotexnik @  22.3.2013,  18:23 Найти цитируемый пост)
Жаль, что нельзя. 

Если вы будете использовать только с инт, или только с определенным небольши набором типов, то можно 
явно инстанцировать их, и не переносить в заголовок.

Код

template class Vector2D <int>; // куда-нибудь в сипишник, где нахояцца эти шаблоны

(но это, не очень кошерный путь.)

PM MAIL   Вверх
VSB
Дата 24.3.2013, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 23.8.2007

Репутация: нет
Всего: 2



И еще по моему, нужно 
Код

return *this;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1819 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.