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

Помогите устранить ошибку: ссылка на неразрешенный внешний символ - C++

Восстановить пароль Регистрация
 
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
16.06.2014, 12:56     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #1
Здравствуйте!
Помогите бьет ошибку:


error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Car::Car(void)" (??0Car@@QAE@XZ) в функции "void __cdecl `dynamic initializer for 'TruckCar''(void)" (??__ETruckCar@@YAXXZ)

Че делать, как быть, руки крюки еще у меня.

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
#include <iostream>
#include <string.h>
#include <vector>
 
using std::cout;
 
//Тут мы опишем "характеристики" грузовых автомобилей
    class Car  // прародитель
    {
    public:
        Car();
        Car(int CargoCap, int Loong, int Wide, int Hight, int MaxCargoHi,int MaxCargoWi)
        {
            Car::CargoCap =        CargoCap;
            Car::Loong =           Loong;
            Car::Wide =            Wide;
            Car::Hight =           Hight;
            Car::MaxCargoHi =      MaxCargoHi;
            Car::MaxCargoWi =      MaxCargoWi;
        }
 
        
        int CargoCap; //грузоподьемность , kg
        int Loong; // Длина ,sm
        int Wide; // Ширина, sm
        int Hight; //Высота, sm
        int MaxCargoHi; //Максимальная высота груза
        int MaxCargoWi; //Максимальная ширина груза
    };
     
    class Type : public Car
    {
    public:
        Type();//конструктор по умолчанию
        Type(char, int);
        char *type[3]; //тип например А1, А2...
        int countType; // кол-ство автомобилей заданого типа
 
    };
    Car TruckCar[100];
    Type TypeTruck[100];
 
    
 
    void addalltypes()
    {
        
        for (int i = 0; i < 9; i++)
        {
            char a1[3] = "A1";
            TruckCar[i].CargoCap = 12;
            TruckCar[i].Loong = 12;
            TruckCar[i].Wide = 12;
            TruckCar[i].Hight = 12;
            TruckCar[i].MaxCargoHi = 21;
            TruckCar[i].MaxCargoWi = 23;
            TypeTruck[i].type[3] = "A1";
            TypeTruck[i].countType = 23;
 
        }
    }
    
    void showall()
    {
        for (int i = 0; i < 9; i++)
        {
 
    cout <<   TruckCar[i].CargoCap  <<std::endl;
    cout <<   TruckCar[i].Loong           <<std::endl;
    cout <<   TruckCar[i].Wide            <<std::endl;
    cout <<   TruckCar[i].Hight           <<std::endl;
    cout <<   TruckCar[i].MaxCargoHi          <<std::endl;
    cout <<   TruckCar[i].MaxCargoWi          <<std::endl;
    puts(TypeTruck[i].type[3]);  cout << std::endl;
    cout <<   TypeTruck[i].countType          <<std::endl;
 
        }
    }
    
 
 
void main()
{
    addalltypes();
    showall();
    system("pause");
}
З.Ы. Сори, я теме корявое название дал спросонья.

Добавлено через 6 минут
Забыл...
На второй
C++
1
class Type : public Car
Также выбивает ошибку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2014, 12:56     Помогите устранить ошибку: ссылка на неразрешенный внешний символ
Посмотрите здесь:

C++ Ссылка на неразрешенный внешний символ
C++ Не могу запустить программку компилятор выдаёт ошибку error LNK2019: ссылка на неразрешенный внешний символ
Ссылка на неразрешенный внешний символ C++
C++ Ссылка на неразрешенный внешний символ
C++ error LNK2019: ссылка на неразрешенный внешний символ(не могу исправить ошибку)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kukurudza
104 / 85 / 6
Регистрация: 29.08.2012
Сообщений: 539
16.06.2014, 13:30     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #2
Ну все верно, нет тела конструктора по умолчанию
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
16.06.2014, 13:39  [ТС]     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #3
Kukurudza, Подскажите, уважаемый, а как тут конструктор должен выглядеть?
Kukurudza
104 / 85 / 6
Регистрация: 29.08.2012
Сообщений: 539
16.06.2014, 13:46     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #4
Где код взяли?
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
16.06.2014, 19:22  [ТС]     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #5
Kukurudza, Пишу сам, впрочем я эту "проблему" решил если можно назвать так
тут другая наклевалась
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
123
124
125
126
127
128
129
130
131
132
133
134
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h>
#include <vector>
 
using std::cout;
 
//Тут мы опишем "характеристики" грузовых автомобилей
/*
struct CarType 
{
    std::string type; //тип например А1, А2...
    int count; // кол-ство автомобилей заданого типа
    int CargoCap; //грузоподьемность , kg
    int loong; // Длина ,sm
    int Wide; // Ширина, sm
    int Hight; //Высота, sm
    int MaxCargoHi; //Максимальная высота груза
    int MaxCargoWi; //Максимальная ширина груза
    int FullMass; //  Общая масса
};
 
struct RampType
{
    int id; // Номер рампы в базе (системно задается автоматически)
    int RampWide; // Ширина рампы
    int CargoSqwLevel; //площадка для выгрузки грузов находится на уровне ... meters
    int WindowHi; //Высота окна выгрузки см
    int WindowWi; //Ширина окна выгрузки см
    int minRampWideCapac;
    int maxRampWideCapac; //
    int maxMass; // Максимальная масса принимаемого на рампе транспорта
};
*/
 
    class Car  // прародитель
    {
    public:
        Car()
        {
            
            
            CargoCap = 0;
            Loong = 0;
            Wide = 0;
            Hight = 0;
            MaxCargoHi = 0;
            MaxCargoWi = 0;
                    
            
        }
        Car(int CargoCap, int Loong, int Wide, int Hight, int MaxCargoHi,int MaxCargoWi)
        {
            Car::CargoCap =        CargoCap;
            Car::Loong =           Loong;
            Car::Wide =            Wide;
            Car::Hight =           Hight;
            Car::MaxCargoHi =      MaxCargoHi;
            Car::MaxCargoWi =      MaxCargoWi;
        }
        
        int CargoCap; //грузоподьемность , kg
        int Loong; // Длина ,sm
        int Wide; // Ширина, sm
        int Hight; //Высота, sm
        int MaxCargoHi; //Максимальная высота груза
        int MaxCargoWi; //Максимальная ширина груза
    };
     
    class Type : public Car
    {
    public:
        Type()//конструктор по умолчанию
        {
            Car::CargoCap = 0;
            Car::Loong = 0 ;
            Car::Wide = 0 ;
            Car::Hight = 0;
            Car::MaxCargoHi = 0;
            Car::MaxCargoWi = 0;
            Type::type[0] = "A0";
                Type::countType = 0;
        }
        Type(std::string, int);
        char *type[8]; //тип например А1, А2...
        int countType; // кол-ство автомобилей заданого типа
 
    };
    Car TruckCar[10];
    Type TypeTruck[10];
 
    
    
    void addalltypes()
    {
        
        for (int i = 0; i < 9; i++)
        {
            TruckCar[i].CargoCap = 12;
            TruckCar[i].Loong = 12;
            TruckCar[i].Wide = 12;
            TruckCar[i].Hight = 12;
            TruckCar[i].MaxCargoHi = 21;
            TruckCar[i].MaxCargoWi = 23;
            TypeTruck[i].type[0] = "A3";
            TypeTruck[i].countType = 88;
            
        }
    }
    
    void showall()
    {
        for (int i = 0; i < 9; i++)
        {
            cout << "Тип грузового автомобиля:";  printf("%s", TypeTruck[i].type[0]); cout << std::endl;
            cout << "Грузоподьемность, кг:"                   <<TruckCar[i].CargoCap    << std::endl;
            cout << "Длинна ТС, см:"                          <<TruckCar[i].Loong       << std::endl;
            cout << "Ширина ТС, см:"                          <<TruckCar[i].Wide        << std::endl;
            cout << "Высота ТС, см:"                          <<TruckCar[i].Hight       << std::endl;
            cout << "Максимальная ШИРИНА груза, см:"          << TruckCar[i].MaxCargoWi << std::endl;
            cout << "Максимальная ВЫСОТА груза, см:"          <<TruckCar[i].MaxCargoHi  << std::endl;
            cout << "Количество ТС, с данными хар-ками:"      << TypeTruck[i].countType << std::endl;
        }
    }
 
 
    void main()
    {
        setlocale(LC_ALL, "rus");
        AddTypesFromFile();
        
        
        system("pause");
    }
Когда пытаюсь считать из файла инф-цию, программа закрываеться запустив отладчик

Первый этап обработки исключения по адресу 0x514DBBC2 (msvcr120d.dll) в ТестЗадание.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000000.

эта ф-ция
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void AddTypesFromFile()
    {
        FILE * file;
        file = fopen("CarTypes.txt", "r");
        int cnt = 0; //Количество доступных типов
        int i = 0;    //Я простой счетчик i++
 
        rewind(file);
 
        for (int i = 0; i < 9;i++)
        {
            fscanf(file, "%s ", TypeTruck[i].type[1]);
            fscanf(file, "\n%i ", "%i ", "%i ", "%i ", "%i ", "%i ", "%i\n", TruckCar[i].CargoCap, TruckCar[i].Loong, TruckCar[i].Wide, TruckCar[i].Hight, TruckCar[i].MaxCargoWi, TruckCar[i].MaxCargoHi, TypeTruck[i].countType);
 
        } 
 
 
        fclose(file);
    }
Kukurudza
104 / 85 / 6
Регистрация: 29.08.2012
Сообщений: 539
16.06.2014, 20:04     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #6
к предыдущей ошибке. вы объявили конструктор, неявно его зовете (когда создаете 100 элементов в массиве), но тела у конструктора нету. поэтому линкер в недоумении.
ну опять же все верно, где-то записываете по нулевому указателю.
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
16.06.2014, 20:11  [ТС]     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #7
Kukurudza, Подскажите, а как было бы правильнее? Учту и исправлюсь
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
16.06.2014, 20:18     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #8
Цитата Сообщение от Outmee Посмотреть сообщение
char *type[8];
Это массив указателей.
В конструкторе Type() для него надо выделить память, например:
C++
1
2
for(int i=0;i<8;i++)
    type[i]=new char[255];
И не забудьте деструктор.
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
16.06.2014, 20:21  [ТС]     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #9
zss, Кстати раз уж дело пошло о этом глупом char type[8]
Эта переменная создавалась для хранения 2х символов. Но я std::string не мог вывести, короче трудности были, вот так выкрутился коряво((
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
16.06.2014, 21:33     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #10
Цитата Сообщение от Outmee Посмотреть сообщение
char type[8]
У Вас же char* type[8];
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
16.06.2014, 22:15  [ТС]     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #11
zss, когда убираю указатель, мне пишет что невозможно присвоить значение для const char'a

Добавлено через 15 минут
zss, поправил, но функция все так же завершает приложение
Kukurudza
104 / 85 / 6
Регистрация: 29.08.2012
Сообщений: 539
17.06.2014, 05:13     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #12
это зачем:
C++
1
char a1[3] = "A1";
?
Здесь неверно:
TypeTruck[i].type[3] = "A1";
Вам уже подсказали что записью:
C++
1
char *type[3];
Вы создаете массив из трех указателей на тип char.
Если вы хотите массив символов, размер которого равен трем, то нужно объявлять его так:
C++
1
char type[3];
Далее, вот здесь вы ЧЕТВЕРТОМУ (нумерация массивов начинается с 0) указателю из массива type присваиваете строку "A1". Вышли за границу. Это плохо. Когда начнете удалять массивы в деструкторе, программа упадет, так как вы пытаетесь удалить локальную константную строку.

Добавлено через 14 минут
Далее, вот здесь вы ЧЕТВЕРТОМУ (нумерация массивов начинается с 0) указателю из массива type присваиваете строку "A1". Вышли за границу. Это плохо. В этом месте программа скорее всего не упадет, так как адрес строки попадет в countType, потому что в объявлении именно эта переменная идет после char *type[3]. А вот в этом месте программа упадет:
C++
1
puts(TypeTruck[i].type[3]);
так как пытаетесь прочитать память неизвестно откуда (элементов в массиве у Вас 3, а потрогать вы хотите четвертый).
Но даже вот так делать не стоит:
C++
1
TypeTruck[i].type[2] = "A1";
потому что, когда начнете удалять массивы в деструкторе (вот так delete[] type[2]), программа упадет, так как вы пытаетесь удалить локальную константную строку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2014, 13:22     Помогите устранить ошибку: ссылка на неразрешенный внешний символ
Еще ссылки по теме:

C++ Ссылка на неразрешенный внешний символ
Ссылка на неразрешенный внешний символ C++
C++ Ссылка на неразрешенный внешний символ

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

Или воспользуйтесь поиском по форуму:
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
17.06.2014, 13:22  [ТС]     Помогите устранить ошибку: ссылка на неразрешенный внешний символ #13
Kukurudza, я вас понял поэтому исправил на

char type[2] но когда в конструкторе структуры пытаюсь присвоить ему

C++
1
Type::type = {'A','0'};
или

C++
1
Type::type = {"A0"}
Нельзя присвоить сущности типа конст чар,сущность чар
Yandex
Объявления
17.06.2014, 13:22     Помогите устранить ошибку: ссылка на неразрешенный внешний символ
Ответ Создать тему
Опции темы

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