Форум программистов, компьютерный форум CyberForum.ru

Немогу понять в чем ошибка. - C++

Восстановить пароль Регистрация
 
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
23.12.2011, 21:04     Немогу понять в чем ошибка. #1
>inputInfo.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Node<class Theatr<class Actor> >::Node<class Theatr<class Actor> >(class Theatr<class Actor> const &)" (??0?$Node@V?$Theatr@VActor@@@@@@QAE@ABV?$Theatr@VActor@@@@@Z) в функции "public: void __thiscall List<class Theatr<class Actor> >:ushBack(class Theatr<class Actor> const &)" (?pushBack@?$List@V?$Theatr@VActor@@@@@@QAEXABV?$Theatr@VActor@@@@@Z)
Часть кода(проект в WinAPI):
C++
1
2
3
4
5
6
7
8
9
10
#include "stdafx.h" 
#include "List.h"
#include "Theatr.h"
#include "Actor.h"
void inputTheatrs( List<Theatr<Actor> > &theatrs )
{
    Theatr<Actor> theatr( _T("Театр1"), _T("Фамилия1"), _T("1234") ) ;
    theatrs.pushBack(theatr ); // ошибка вроде как из-за этой строки
           ........
}
List.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
template< class T >
class Node
{
    template< class T > friend class List;
    template< class node, class T > friend class Iterator;
public:
    Node();
    Node( const T &m_data );
    T &get() { return data; }
    Node *next() const { return nextPtr; }
private:
    T data;
    Node *nextPtr;
};
template< class T >
class List
{
public: 
    void pushBack( const T &val )
    {
        Node< T > *newPtr = new Node< T >(val);
        .......
    }
private:
    Node<T> *firstPtr;
    size_t mysize;
};
Если убрать строку theatrs.pushBack(theatr );, то ошибка пропадает.
Если надо, могу скинуть другие части кода.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.12.2011, 21:41     Немогу понять в чем ошибка. #2
линкер не нашел реализацию конструктора
Node( const T &m_data );
где она у вас?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
23.12.2011, 21:53  [ТС]     Немогу понять в чем ошибка. #3
Заработало, спасибо.
Странно, почему компилятор не проверяет шаблонные классы на синтаксические ошибки?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.12.2011, 21:59     Немогу понять в чем ошибка. #4
синтаксических ошибок не было. это ошибка линкера. и правильный перевод это не
"ссылка на неразрешенный внешний символ", а "ссылка на ненайденный (или другой синоним к слову unresolved) символ".
подозреваю, что поначалу слово неразрешенный воспринимается как запрещенный.
обычно ошибки линкера начинаются: reference to unresolved symbol ... refered from function ...
локализованные ошибки компиляторов\линкеров\... - зло.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
23.12.2011, 22:08  [ТС]     Немогу понять в чем ошибка. #5
Ошибок нет только в той части, которую я выложил. Я посмотрел весь класс и нашел много ошибок.
А компилятору хоть бы что. Ошибка встретится только тогда, когда я буду использовать метод с ошибкой.
VS 2008

Добавлено через 6 минут
Написал вызов в коде метода с ошибками. Ошибки посыпались. Хорошо, что хоть эти ошибки он внятно мог объяснить.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.12.2011, 22:20     Немогу понять в чем ошибка. #6
Это особенность шаблонов. компилятор не всегда в состоянии определить корректность шаблонного кода до тех пор, пока шаблон не инстанцируется. А если он не инстанцируется, то и проверки нет никакой. эта особенность даже используется при проектировании шаблонных классов\ф-ий.
Есть еще такая штука как SFINAE:
http://en.wikipedia.org/wiki/Substit...s_not_an_error
Yandex
Объявления
23.12.2011, 22:20     Немогу понять в чем ошибка.
Ответ Создать тему
Опции темы

Текущее время: 11:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru