0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 10
1

Ошибки LNK 2005, LNK 1169

12.03.2017, 16:41. Показов 473. Ответов 9

Не могу найти ошибку в проге:
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
functions.h
-----------
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <stdlib.h>
using namespace std;
 
#include "figure.h"
 
void zada4a();
------------
figure.h
------------
class point{
    public:
    double x;
    double y;
    point(): x(0), y(0){}
    point(int m_x, int m_y){
        x = m_x;
        y = m_y;
    }
};
 
class figure{
private:
    point koor, koor1, koor2, koor3;
    static char nazv[9];
    static int total;
public:
    figure(): koor(0,0), koor1(0,0), koor2(0,0), koor3(0,0){
        total++;
        cout << nazv << " " << total << " ";
    }                     //Конструктор по умолчанию
    figure( point kor, point kor1, point kor2, point kor3 ){
        koor=kor;
        koor1=kor1;
        koor2=kor2;
        koor3=kor3;
        total++;
        cout << nazv << " " << total<< " ";
    }
    figure( const figure&  A ){
    koor=A.koor;
    koor1=A.koor1;
    koor2=A.koor2;
    koor3=A.koor3;
    cout << endl << "Конструктор копирования " << endl;
}
    ~figure(){
        total--;
    }
    void proverka(figure& A){
    koor=A.koor;
    koor1=A.koor1;
    koor2=A.koor2;
    koor3=A.koor3;
    double AC = sqrt(pow(koor.x - koor2.x, 2) + pow(koor.y - koor2.y, 2));
    double BD = sqrt(pow(koor1.x - koor3.x, 2) + pow(koor1.y - koor3.y, 2));
    double AB = sqrt(pow(koor.x - koor1.x, 2) + pow(koor.y - koor1.y, 2));
    double AD = sqrt(pow(koor.x - koor3.x, 2) + pow(koor.y - koor3.y, 2));
    double BC = sqrt(pow(koor1.x - koor2.x, 2) + pow(koor1.y - koor2.y, 2));
    if (AC==BD){
        cout << endl << "Трапеция равнобедренная " << endl;
        double h = sqrt(pow(AB,2)-((pow(BC-AD,2))/4));
        double S = h*(BC+AD)/2;
        cout << "Площадь трапеции - " << S << endl << "Высота трапеции - " << h << endl;
    }
    else{
    cout << endl << "Трапеция не равнобедренная " << endl;
    double Perimetr = AB*2+AD+BC;
    cout << "Периметр трапеции равен " << Perimetr <<endl;
    }
    }
};
 
char figure::nazv[9] = "Трапеция";
int figure::total = 0; 
------------
main.cpp
------------
#include "functions.h"
 
void main(){
    setlocale(0, "RUS");
    zada4a();
    system("pause");
    return;
}
------------
functions.cpp
------------
#include "functions.h"
 
void zada4a(){
    figure a1, a2,a5;
    point a(1,1), b(4,4), c(6,4), d(9,1);
    point aa1(1,1), bb1(2,4), cc1(6,4), dd1(9,1);
    figure ak(a,b,c,d);
    figure ak1(aa1,bb1,cc1,dd1);
    ak.proverka(ak);
    ak1.proverka(ak1);
    figure ab(ak);
return;
}
Пишет: error LNK2005: "private: static int figure::total" (?total@figure@@0HA) уже определен в main.obj
error LNK2005: "private: static char * figure::nazv" (?nazv@figure@@0PADA) уже определен в main.obj
error LNK1169: обнаружен многократно определенный символ - один или более

Нужно сделать так, чтобы основная функция находилась в отдельном файле. И вот с этим как раз и начинаются проблемы. Если все действия функции "zada4a()" делать в main, то всё прекрасно работает.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2017, 16:41
Ответы с готовыми решениями:

Работа с tinyxml ошибки LNK 2019 и LNK 2001
всем привет! скачал архив tinyxml, разархивировал в папку проекта затем написал следующий код: ...

LNK 2019 ссылка на неразрешенный внешний символ в функции _main; LNK 1120 неразрешенных внешних элементов: 1
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string.h&gt; #include...

LNK 2005, переменные уже определены в другом модуле
Здравия желаю! Проблема в том, что 2 эти статические переменные определяются еще раз. Всего 2 .cpp...

LNK Ошибки - 2019 и 1120
error LNK2019 error LNK1120 Такие ошибки в коде: #include &lt;windows.h&gt; int WINAPI...

9
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
12.03.2017, 19:06 2
Должна быть пара: figure.h и figure.cpp. Во второй - все реализации и эти две строки.
1
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 10
12.03.2017, 22:14  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
и эти две строки.
Можете пожалуйста уточнить, про какие строки вы говорите ?
А про пару файлов странно, почему нельзя все в h файле делать ?
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
12.03.2017, 23:23 4
78-79.
В h-файле должны быть только описания.
1
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 10
13.03.2017, 00:02  [ТС] 5
Спасибо, первая проблема решена, но после неё сразу же появилась другая. В задаче надо перегрузить оператор ввода. Но при написании дружественной функции компилятор все равно пишет что d.x (поле класса point) недоступно.
C++
1
2
3
4
istream& operator>>(istream& s, point& d){                                            
    s >> d.x;         
    return s;                                    
}
http://pastebin.com/BSEkRmfB
0
nd2
3416 / 2796 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
13.03.2017, 00:48 6
Цитата Сообщение от Alcatras Посмотреть сообщение
Но при написании дружественной функции компилятор все равно пишет что d.x (поле класса point) недоступно.
Раз дружественная, то должно быть доступным.
0
С чаем беда...
Эксперт CЭксперт С++
9165 / 4681 / 1271
Регистрация: 18.10.2014
Сообщений: 10,594
13.03.2017, 05:47 7
Цитата Сообщение от Alcatras Посмотреть сообщение
Но при написании дружественной функции компилятор все равно пишет что d.x (поле класса point) недоступно.
Если код написан именно так, как вы привели, то такой ошибки не будет. Либо вы привели неточный код, либо вы что-то выдумываете про ошибку.

Также отсутствует включение заголовочного файла <cmath> (которое необходимо) и зачем-то включается <stdlib.h> (зачем?).

Еще удивляет странная манера указывать символ \0 в конце строкового литерала

C++
1
char figure::nazv[10] = "Трапеция\0";
Это где так учат? И зачем?

C++
1
void main(){
int main() а не void main().
1
nd2
3416 / 2796 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
13.03.2017, 06:03 8
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
и зачем-то включается <stdlib.h> (зачем?).
C++
1
system("pause");
0
Эксперт С++
8430 / 4102 / 895
Регистрация: 15.11.2014
Сообщений: 9,216
13.03.2017, 09:36 9
Цитата Сообщение от nd2 Посмотреть сообщение
system("pause");
http://rextester.com/JVB87340

C++
1
2
3
4
5
6
7
#include <iostream>
 
int main() 
{
    std::cout << "hello, CyberForum\n";
    system("pause");
}
0
nmcf
13.03.2017, 10:29     Ошибки LNK 2005, LNK 1169
  #10

Не по теме:

hoggy, ты же за порядок, а system() именно в cstdlib.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2017, 10:29

Помощь в написании контрольных, курсовых и дипломных работ здесь.

LNK 2001
Error 6 error LNK2001: unresolved external symbol &quot;private: static char * myText::szText&quot;...

error lnk?
При компиляции вылазит такая штука: 1&gt;ConsoleApplication.obj : error LNK2028: ёё√ыър эр...

error lnk 2019
здраствуйте! решил заняться win api и mfc, открываю книгу &quot;Visual C++. Разработка...

Error LNK 2001
Здрасьте, помогите быдлокодеру разобраться В общем у меня вроде все файлы проекта друг к другу...

LNK-2019 и LNK1120
не могу понять как убрать эти ошибки в визуал студио. Сама программа пишет что правильная но не...

Выдает ошибку LNK 2019
#include &quot;integer_map.hpp&quot; #include &quot;integer_vector.hpp&quot; #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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