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

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

Войти
Регистрация
Восстановить пароль
 
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
#1

LNK2019 - C++

10.12.2013, 16:02. Просмотров 173. Ответов 5
Метки нет (Все метки)

Заголовочный файл:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace ns
{
    const int QUARTERS = 4;
    struct sales
    {
        double Sales[QUARTERS];
        double average;
        double max;
        double min;
    };
    void setSales (sales &, const double[], int n = 4);
    void setSales (sales &);
    void showSales (const sales &);
    
    template <class T>
    T average (const T a[]); //для расчета среднего значения
 
    template <class T>
    void max_min (const T a[], sales &);//для выявления минимального и максимального значения
}


Первый файл:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <Windows.h>
#include "h.h"
 
#define rus setlocale(0,"rus");SetConsoleCP(1251);SetConsoleOutputCP(1251);
 
using std::cout; using std::cin; using std::endl; using std::string;
 
using namespace ns;
 
template <class T>
T average (const T a[])
{
    T summ = 0;
    int i = 0;
    
    for (i; i < sizeof(a); i++) summ += a[i];
    
    return summ/i;
}
 
template <class T>
void max_min (const T a[], sales & s)
{
    T max = a[0]; T min = a[0];
    
    for (int i = 0; i < sizeof(a); i++)
    {
        if (max < a[i]) max = a[i];
        if (min > a[i]) min = a[i];
    }
    
    s.max = max; s.min = min;
}
 
void setSales (sales & s, const double ar[], int n = 4)
{
    for (int i = 0; i < n; i++) s.Sales[i] = ar[i];
}
 
void setSales (sales & s)
{
    rus;
    double x[4];
    
    for (int i = 0; i < 4; i++)
    {
        cout << "Введите показатель за " << i << "квартал: ";
        cin >> x[i];
    }
    
    s.average = ns::average(x); 
    ns::max_min(x,s); //
}
 
void showSales (const sales & s)
{
    rus;
    cout << s.Sales << endl;
    cout << s.average << endl;
    cout << s.max << endl;
    cout << s.min << endl;
}


Второй файл:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <Windows.h>
#include "h.h"
 
#define rus setlocale(0,"rus");SetConsoleCP(1251);SetConsoleOutputCP(1251);
 
using std::cout; using std::cin; using std::endl; using std::string;
 
using namespace ns;
 
int main()
{
    rus;
    sales y[2];
    double ar[7] = {1,4,12,14,15};
    
    // ПРОГОНКА 1
    for (int i = 0; i < 2; i++) setSales(y[i]);
    cout << "Прогонка 1" << endl;
    for (int i = 0; i < 2; i++) showSales(y[i]);
 
    // ПРОГОНКА 2
    setSales(y[0],ar,3);
    cout << "Прогонка 2" << endl;
    for (int i = 0; i < 2; i++) showSales(y[i]);
 
    system("pause");
    return 0;
}


Выходят ошибки LNK2019 для каждой функции. В чем проблема?
Что вообще означает эта ошибка? Часто попадается мне.

И еще вопрос:

C++
1
2
s.average = ns::average(x); 
    ns::max_min(x,s); //
Если не написать операцию разрешения контекста, MSVS показывает ошибку(рис.2). Почему так происходит, если я уже применил namespace using ns?

Заранее спасибо!
Миниатюры
LNK2019   LNK2019  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2013, 16:02     LNK2019
Посмотрите здесь:

error: LNK2019 C++
Ошибка LNK2019 C++
C++ Ошибка LNK2019
C++ error LNK2019
C++ LNK2019 и LNK1120
Ошибка LNK2019 C++
C++ error LNK2019
Ошибка LNK2019 C++
Ошибка LNK2019 C++
LNK2019 and LNK1120 C++
C++ LNK2019 D3D9
C++ ошибка LNK2019

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12534 / 7096 / 797
Регистрация: 27.09.2012
Сообщений: 17,508
Записей в блоге: 2
Завершенные тесты: 1
10.12.2013, 16:03     LNK2019 #2
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Выходят ошибки LNK2019 для каждой функции. В чем проблема?
ывыдыдвызыкивы да ви на прата зигазага
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
10.12.2013, 16:06  [ТС]     LNK2019 #3
Цитата Сообщение от Croessmah Посмотреть сообщение
ывыдыдвызыкивы да ви на прата зигазага
Эээээ, что?
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12534 / 7096 / 797
Регистрация: 27.09.2012
Сообщений: 17,508
Записей в блоге: 2
Завершенные тесты: 1
10.12.2013, 16:07     LNK2019 #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
#include <iostream>
#include <Windows.h>
#include "h.h"
 
#define rus setlocale(0,"rus");SetConsoleCP(1251);SetConsoleOutputCP(1251);
 
using std::cout; using std::cin; using std::endl; using std::string;
 
namespace ns{
 
template <class T>
T average (const T a[])
{
    T summ = 0;
    int i = 0;
    
    for (i; i < sizeof(a); i++) summ += a[i];
    
    return summ/i;
}
 
template <class T>using 
void max_min (const T a[], sales & s)
{
    T max = a[0]; T min = a[0];
    
    for (int i = 0; i < sizeof(a); i++)
    {
        if (max < a[i]) max = a[i];
        if (min > a[i]) min = a[i];
    }
    
    s.max = max; s.min = min;
}
 
void setSales (sales & s, const double ar[], int n = 4)
{
    for (int i = 0; i < n; i++) s.Sales[i] = ar[i];
}
 
void setSales (sales & s)
{
    rus;
    double x[4];
    
    for (int i = 0; i < 4; i++)
    {
        cout << "Введите показатель за " << i << "квартал: ";
        cin >> x[i];
    }
    
    s.average = ns::average(x); 
    ns::max_min(x,s); //
}
 
void showSales (const sales & s)
{
    rus;
    cout << s.Sales << endl;
    cout << s.average << endl;
    cout << s.max << endl;
    cout << s.min << endl;
}
 
}
Добавлено через 15 секунд
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Эээээ, что?
какое название темы, такой и ответ
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
10.12.2013, 16:13  [ТС]     LNK2019 #5
Цитата Сообщение от Croessmah Посмотреть сообщение

какое название темы, такой и ответ
А, да это я хотел предварительный просмотр сделать, а название не придумал, вот и забыл)

Добавлено через 3 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
а так?
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
#include <iostream>
#include <Windows.h>
#include "h.h"
 
#define rus setlocale(0,"rus");SetConsoleCP(1251);SetConsoleOutputCP(1251);
 
using std::cout; using std::cin; using std::endl; using std::string;
 
namespace ns{
 
template <class T>
T average (const T a[])
{
    T summ = 0;
    int i = 0;
    
    for (i; i < sizeof(a); i++) summ += a[i];
    
    return summ/i;
}
 
template <class T>using 
void max_min (const T a[], sales & s)
{
    T max = a[0]; T min = a[0];
    
    for (int i = 0; i < sizeof(a); i++)
    {
        if (max < a[i]) max = a[i];
        if (min > a[i]) min = a[i];
    }
    
    s.max = max; s.min = min;
}
 
void setSales (sales & s, const double ar[], int n = 4)
{
    for (int i = 0; i < n; i++) s.Sales[i] = ar[i];
}
 
void setSales (sales & s)
{
    rus;
    double x[4];
    
    for (int i = 0; i < 4; i++)
    {
        cout << "Введите показатель за " << i << "квартал: ";
        cin >> x[i];
    }
    
    s.average = ns::average(x); 
    ns::max_min(x,s); //
}
 
void showSales (const sales & s)
{
    rus;
    cout << s.Sales << endl;
    cout << s.average << endl;
    cout << s.max << endl;
    cout << s.min << endl;
}
 
}
Так работает, но объясни пожалуйста, зачем нужно было снова определять пространство имён? в h.h все уже есть же
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12534 / 7096 / 797
Регистрация: 27.09.2012
Сообщений: 17,508
Записей в блоге: 2
Завершенные тесты: 1
10.12.2013, 16:15     LNK2019 #6
В заголовке ns::max_min<T> объявлена, а реализация у Вас как max_min<T>.
А если реализовать в пространстве имен ns, то получится ns::max_min<T>, что и ожидает линкер.
Повторите пространства имен
Yandex
Объявления
10.12.2013, 16:15     LNK2019
Ответ Создать тему
Опции темы

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