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

error LNK2001: unresolved external symbol - C++

Восстановить пароль Регистрация
 
Tantala
1 / 1 / 0
Регистрация: 17.07.2013
Сообщений: 10
17.07.2013, 15:22     error LNK2001: unresolved external symbol #1
Здравствуйте. Начала изучать С++ по Либерти. На шаблонах компилятор начал выдавать ошибки. Вроде уже все 10 раз проверила. При комментировании строки в main() все работает, иначе:


1>19_4.obj : error LNK2001: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Array<int> &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$Array@H@@@Z)
1>D:\moyo_pereobuchenie\CPP\day19\19.4_friendlyClass_or_functionAsPublicTemplate\Debug\19.4_friendlyClass_or_functionAsPublicTemplate.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://d:\moyo_pereobuchenie\CPP\day19\19.4_friendlyClass_or_functionAsPublicTemplate\19.4_friendlyClass_or_functionAsPublicTemplate\Debug\BuildLog.htm"
1>19.4_friendlyClass_or_functionAsPublicTemplate - 2 error(s), 0 warning(s)




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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// листинг 19.4. //использование оператора вывода
#include <iostream>
/*using std::cout; using std::endl; 
using std::ostream; using std::cin; */
using namespace std;
const int DefaultSize = 10;
class Animal
{
    public:
        Animal(int);
        Animal();
        ~Animal(){}
        int GetWeigth() const {return itsWeight;}
        void Didplay() const {cout << itsWeight;}
    private:
        int itsWeight;
};
Animal::Animal(int weight):
itsWeight(weight)
{}
 
Animal::Animal():
itsWeight(0)
{}
 
template <class T>
class Array
{
    public:
        // constructors
        Array(int itsSize = DefaultSize);
        Array(const Array &rhs);
        ~Array(){delete[] pType;}
 
        //operators
        Array& operator=(const Array&);
        T& operator[] (int offSet){return pType[offSet];}
        const T& operator[](int offSet) const
        { return pType[offSet];}
        // access methods
        int GetSize(){return itsSize;}
        // функция-друг
        friend  ostream& operator<<(ostream&, Array<T>&); //[COLOR="DarkRed"]-----------------------перегруз оператора вывода[/COLOR]
 
    private:
        T * pType;
        int itsSize;
};
 
template <class T>
ostream& operator<<(ostream& output, Array<T>& theArray)
{
    for(int i=0; i<theArray.GetSize(); i++)
        output<< "["<<i<<"] " << theArray[i] << endl; return output;         [COLOR="Red"]//------------- у Либерти тут все работает, у меня при обращении из main() ошибка[/COLOR]
}
 
 
 
// выполняем конструктор
template <class T>
Array<T>::Array(int size):
itsSize(size)
{
    pType = new T[size];
    for(int i=0; i<size; i++)
        pType[i]=0;
}
 
// конструктор-копировщик
template <class T>
Array<T>::Array(const Array &rhs)
{
    itsSize = rhs.GetSize();
    pType = new T[itsSize];
    for(int i=0; i< itsSize; i++)
        pType[i]= rhs[i];
}
 
// операторы присваивания
template <class T>
Array<T>& Array<T>::operator =(const Array & rhs)
{
    if(this==&rhs)
        return *this;
    delete[] pType;
    itsSize = rhs.GetSize();
    pType = new T[itsSize];
    for(int i=0; i<itsSize; i++)
        pType[i] = rhs[i];
    return *this;
}
 
int main()
{
    bool Stop = false;
    int offfset, value;
    Array<int> theArray;
 
    while(!Stop)
    {
        cout<< "Enter an offfset (0-9) ";
        cout<< "and a value. (-1 to stop): ";
        cin >> offfset>> value;
 
        if(offfset<0)
            break;
 
        if(offfset>9)
        {
            cout<< "*** Please use values between 0 and 9. ***";
            continue;
        }
    
        theArray[offfset] = value;
    }
    
    cout<< "\nHere's the entire array:\n";
    //cout<< theArray << endl;      //-------------------------------> на этой строке ошибка
    
    system("pause");
    return 0;
}
Помогите, пожалуйста, разобраться.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,332
Завершенные тесты: 1
17.07.2013, 15:28     error LNK2001: unresolved external symbol #2
Может быть так:
C++
1
cout<< theArray[offfset] << endl;      //-------------------------------> на этой строке ошибка
Tantala
1 / 1 / 0
Регистрация: 17.07.2013
Сообщений: 10
17.07.2013, 16:03  [ТС]     error LNK2001: unresolved external symbol #3
оператор вывода перегружается в шаблоне и при использовании в main() он должен работать с самим массивом, а не с его элементами.
Перегрузка оператора для этого и делалась.
Поэтому использование обращения к каждому элементу массива в main() в данном случае не подходит.
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
17.07.2013, 16:20     error LNK2001: unresolved external symbol #4
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// листинг 19.4. //использование оператора вывода
#include <iostream>
/*using std::cout; using std::endl;
using std::ostream; using std::cin; */
using namespace std;
const int DefaultSize = 10;
class Animal
{
    public:
        Animal(int);
        Animal();
        ~Animal(){}
        int GetWeigth() const {return itsWeight;}
        void Didplay() const {cout << itsWeight;}
    private:
        int itsWeight;
};
Animal::Animal(int weight):
itsWeight(weight)
{}
 
Animal::Animal():
itsWeight(0)
{}
 
template <class T>
class Array
{
    public:
        // constructors
        Array(int itsSize = DefaultSize);
        Array(const Array &rhs);
        ~Array(){delete[] pType;}
 
        //operators
        Array& operator=(const Array&);
        T& operator[] (int offSet){return pType[offSet];}
        const T& operator[](int offSet) const
        { return pType[offSet];}
        // access methods
        int GetSize(){return itsSize;}
        // функция-друг
        friend ostream& operator<<(ostream& output, Array<T>& theArray)
        { for(int i=0; i<theArray.GetSize(); i++)
          output<< "["<<i<<"] " << theArray[i] << endl;
          return output;
        }
 
        //[COLOR="DarkRed"]-----------------------перегруз оператора вывода[/COLOR]
 
    private:
        T * pType;
        int itsSize;
};
 
 
 
 
 
// выполняем конструктор
template <class T>
Array<T>::Array(int size):
itsSize(size)
{
    pType = new T[size];
    for(int i=0; i<size; i++)
        pType[i]=0;
}
 
// конструктор-копировщик
template <class T>
Array<T>::Array(const Array &rhs)
{
    itsSize = rhs.GetSize();
    pType = new T[itsSize];
    for(int i=0; i< itsSize; i++)
        pType[i]= rhs[i];
}
 
// операторы присваивания
template <class T>
Array<T>& Array<T>::operator =(const Array & rhs)
{
    if(this==&rhs)
        return *this;
    delete[] pType;
    itsSize = rhs.GetSize();
    pType = new T[itsSize];
    for(int i=0; i<itsSize; i++)
        pType[i] = rhs[i];
    return *this;
}
 
int main()
{
    bool Stop = false;
    int offfset, value;
    Array<int> theArray;
 
    while(!Stop)
    {
        cout<< "Enter an offfset (0-9) ";
        cin >> offfset;
        if(offfset<0)
           {Stop=true;}
        else if(offfset>9)
        {   cout<< "*** Please use values between 0 and 9. ***"; continue;        }
        else
          {  cout<< "and a value. (-1 to stop): ";
             cin >> value;
              if(value<0)  Stop=true;
              else         theArray[offfset] = value;
          }
    }
 
    cout<< "\nHere's the entire array:\n";
    cout<< theArray<< endl;
 
    system("pause");
    return 0;
}
Tantala
1 / 1 / 0
Регистрация: 17.07.2013
Сообщений: 10
17.07.2013, 17:00  [ТС]     error LNK2001: unresolved external symbol #5
Цитата Сообщение от soican Посмотреть сообщение
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// листинг 19.4. //использование оператора вывода
#include <iostream>
/*using std::cout; using std::endl;
using std::ostream; using std::cin; */
using namespace std;
const int DefaultSize = 10;
class Animal
{
    public:
        Animal(int);
        Animal();
        ~Animal(){}
        int GetWeigth() const {return itsWeight;}
        void Didplay() const {cout << itsWeight;}
    private:
        int itsWeight;
};
Animal::Animal(int weight):
itsWeight(weight)
{}
 
Animal::Animal():
itsWeight(0)
{}
 
template <class T>
class Array
{
    public:
        // constructors
        Array(int itsSize = DefaultSize);
        Array(const Array &rhs);
        ~Array(){delete[] pType;}
 
        //operators
        Array& operator=(const Array&);
        T& operator[] (int offSet){return pType[offSet];}
        const T& operator[](int offSet) const
        { return pType[offSet];}
        // access methods
        int GetSize(){return itsSize;}
        // функция-друг
        friend ostream& operator<<(ostream& output, Array<T>& theArray)
        { for(int i=0; i<theArray.GetSize(); i++)
          output<< "["<<i<<"] " << theArray[i] << endl;
          return output;
        }
 
        //[COLOR="DarkRed"]-----------------------перегруз оператора вывода[/COLOR]
 
    private:
        T * pType;
        int itsSize;
};
 
 
 
 
 
// выполняем конструктор
template <class T>
Array<T>::Array(int size):
itsSize(size)
{
    pType = new T[size];
    for(int i=0; i<size; i++)
        pType[i]=0;
}
 
// конструктор-копировщик
template <class T>
Array<T>::Array(const Array &rhs)
{
    itsSize = rhs.GetSize();
    pType = new T[itsSize];
    for(int i=0; i< itsSize; i++)
        pType[i]= rhs[i];
}
 
// операторы присваивания
template <class T>
Array<T>& Array<T>::operator =(const Array & rhs)
{
    if(this==&rhs)
        return *this;
    delete[] pType;
    itsSize = rhs.GetSize();
    pType = new T[itsSize];
    for(int i=0; i<itsSize; i++)
        pType[i] = rhs[i];
    return *this;
}
 
int main()
{
    bool Stop = false;
    int offfset, value;
    Array<int> theArray;
 
    while(!Stop)
    {
        cout<< "Enter an offfset (0-9) ";
        cin >> offfset;
        if(offfset<0)
           {Stop=true;}
        else if(offfset>9)
        {   cout<< "*** Please use values between 0 and 9. ***"; continue;        }
        else
          {  cout<< "and a value. (-1 to stop): ";
             cin >> value;
              if(value<0)  Stop=true;
              else         theArray[offfset] = value;
          }
    }
 
    cout<< "\nHere's the entire array:\n";
    cout<< theArray<< endl;
 
    system("pause");
    return 0;
}
Спасибо. Запускается без ошибок, вот только на консоль почему-то ничего не выводит.

Добавлено через 20 минут
все, спасибо, разобралась.
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
17.07.2013, 17:00     error LNK2001: unresolved external symbol #6
как не выводит?
Цитата Сообщение от Tantala Посмотреть сообщение
вот только на консоль почему-то ничего не выводит.
Миниатюры
error LNK2001: unresolved external symbol  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2013, 17:02     error LNK2001: unresolved external symbol
Еще ссылки по теме:

Error LNK2019: unresolved external symbol C++
C++ Error LNK2001: unresolved external symbol
C++ Error LNK2001: unresolved external symbol

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

Или воспользуйтесь поиском по форуму:
Tantala
1 / 1 / 0
Регистрация: 17.07.2013
Сообщений: 10
17.07.2013, 17:02  [ТС]     error LNK2001: unresolved external symbol #7
я немного протупила, из-за чего и не выводило . Теперь все ок.
Yandex
Объявления
17.07.2013, 17:02     error LNK2001: unresolved external symbol
Ответ Создать тему
Опции темы

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