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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

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

23.12.2011, 21:04. Просмотров 401. Ответов 5
Метки нет (Все метки)

>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 );, то ошибка пропадает.
Если надо, могу скинуть другие части кода.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2011, 21:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Немогу понять в чем ошибка. (C++):

Немогу понять в чем ошибка ( - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; int main() { float x, f1, f2,...

Немогу понять в чем ошибка. - C++
// lab5OOP.cpp : Defines the entry point for the console application. // #include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include...

немогу никак понять в чем ошибка=(помогите плиз! - C++
есть вот такой вот код : #include &lt;iostream.h&gt; #include &lt;math.h&gt; void main(void) { int...

Немогу понять почему в программе выкидует ошибка - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; # include &lt;clocale&gt; #include &lt;conio.h&gt; using namespace std; void main...

понять в чем ошибка - C++
при компиляции vs 2015 выдает ошибку 1&gt;c:\users\admin\desktop\projectc++\laba11\laba11\source.cpp(14): error C3867:...

Не могу понять в чем ошибка - C++
#include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt; int main(){ double a,b,c; double x1,x2,D,x; printf(&quot;Enter a b...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.12.2011, 21:41 #2
линкер не нашел реализацию конструктора
Node( const T &m_data );
где она у вас?
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
23.12.2011, 21:53  [ТС] #3
Заработало, спасибо.
Странно, почему компилятор не проверяет шаблонные классы на синтаксические ошибки?
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.12.2011, 21:59 #4
синтаксических ошибок не было. это ошибка линкера. и правильный перевод это не
"ссылка на неразрешенный внешний символ", а "ссылка на ненайденный (или другой синоним к слову unresolved) символ".
подозреваю, что поначалу слово неразрешенный воспринимается как запрещенный.
обычно ошибки линкера начинаются: reference to unresolved symbol ... refered from function ...
локализованные ошибки компиляторов\линкеров\... - зло.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
23.12.2011, 22:08  [ТС] #5
Ошибок нет только в той части, которую я выложил. Я посмотрел весь класс и нашел много ошибок.
А компилятору хоть бы что. Ошибка встретится только тогда, когда я буду использовать метод с ошибкой.
VS 2008

Добавлено через 6 минут
Написал вызов в коде метода с ошибками. Ошибки посыпались. Хорошо, что хоть эти ошибки он внятно мог объяснить.
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.12.2011, 22:20 #6
Это особенность шаблонов. компилятор не всегда в состоянии определить корректность шаблонного кода до тех пор, пока шаблон не инстанцируется. А если он не инстанцируется, то и проверки нет никакой. эта особенность даже используется при проектировании шаблонных классов\ф-ий.
Есть еще такая штука как SFINAE:
http://en.wikipedia.org/wiki/Substit...s_not_an_error
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2011, 22:20
Привет! Вот еще темы с ответами:

Не могу понять в чем ошибка? - C++
Выдает ошибки а в чем проблемма не пойму (программирую недавно) Unit1.cpp(94): W8004 'p' is assigned a value that is never used ...

Не могу понять в чем ошибка?! - C++
Задание: -Визначити кількість вузлів дерева, в яких є два нащадки. -функция добавления елемента -функцию удаления елемента -функцію...

не могу понять в чем ошибка. - C++
Здравствуйте. Извините если подобные темы уже есть или это типичный вопрос но я их не нащел в поиске. Я недавно на С++ совсем и хотелось бы...

Не могу понять в чем ошибка - C++
Всем доброго время суток целый день бьюсь, не понимаю в чем ошибка: #include &lt;iostream&gt; using std::endl; int myFunc(unsigned short...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.12.2011, 22:20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru