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

Ошибка LNK1169 обнаружен многократно определенный символ

15.06.2021, 19:05. Показов 1177. Ответов 3

Здравствуйте, ни с того ни с сего Visual studio начало выдавать вот такие ошибки:
Ошибка LNK1169 обнаружен многократно определенный символ - один или более
Ошибка LNK2005 "class sf::View Cam" (?Cam@@3VView@sf@@A) уже определен в engine.obj
Ошибка LNK2005 "class sf::String (* TileMap)[30]" (?TileMap@@3PAY0BO@VString@sf@@A) уже определен в engine.obj
Ошибка LNK2005 "void __cdecl moveCam(float,float)" (?moveCam@@YAXMM@Z) уже определен в engine.obj

Вот код (используется библиотека SFML)

main.cpp
C++
1
2
3
4
5
6
7
8
9
#include "engine.h"
 
int main()
{
    Engine engine;
 
    engine.start();
    return 0;
}
engine.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
28
29
#pragma once
#include <SFML\Graphics.hpp>
#include "character.h"
#include "map.h"
#include "view.h"
using namespace sf;
 
class Engine
{
private:
    RenderWindow m_Window;
 
    Sprite m_map;
    Texture m_mapTexture;
 
    Character m_Character;
 
    void input();
 
    void update(float dtAsSeconds);
 
    void drawMap();
 
    void collision();
public:
    Engine();
 
    void start();
};
engine.cpp
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#include "engine.h"
 
Engine::Engine()
{
    Vector2f resolution;
    resolution.x = 512;
    resolution.y = 512;
 
    m_Window.create(VideoMode(resolution.x, resolution.y), "Simple 2D Rpg Project by Sam W.");
    Cam.reset(FloatRect(0, 0, 512, 512));
 
    Image m_mapImage;
    m_mapImage.loadFromFile("Textures/Background/bgTileset.png");
    m_mapImage.createMaskFromColor(Color::White, 0);
    m_mapTexture.loadFromImage(m_mapImage);
    m_map.setTexture(m_mapTexture);
    m_map.setScale(2, 2);
}
 
void Engine::start()
{
    Clock clock;
    while (m_Window.isOpen())
    {
        float time = clock.getElapsedTime().asMicroseconds();
        clock.restart();
        time = time / 800;
 
        input();
        update(time);
        drawMap();
    }
}
 
void Engine::input()
{
    if (Keyboard::isKeyPressed(Keyboard::Escape))
    {
        m_Window.close();
    }
 
    if (Keyboard::isKeyPressed(Keyboard::A))
    {
        if (m_Character.getPos().x > 0) {
            m_Character.moveLeft();
            moveCam(m_Character.getPos().x, m_Character.getPos().y);
        }
        else {
            m_Character.stopLeft();
        }
    }
    else
    {
        m_Character.stopLeft();
    }
 
    if (Keyboard::isKeyPressed(Keyboard::D))
    {
        if (m_Character.getPos().x < 1920 - 64) {
            m_Character.moveRight();
            moveCam(m_Character.getPos().x, m_Character.getPos().y);
        }
        else {
            m_Character.stopRight();
        }
    }
    else
    {
        m_Character.stopRight();
    }
 
    if (Keyboard::isKeyPressed(Keyboard::W))
    {
        if (m_Character.getPos().y > 0) {
            m_Character.moveUp();
            moveCam(m_Character.getPos().x, m_Character.getPos().y);
        }
        else {
            m_Character.stopUp();
        }
    }
    else
    {
        m_Character.stopUp();
    }
 
    if (Keyboard::isKeyPressed(Keyboard::S))
    {
        if (m_Character.getPos().y < 1920 - 64) {
            m_Character.moveDown();
            moveCam(m_Character.getPos().x, m_Character.getPos().y);
        }
        else {
            m_Character.stopDown();
        }
    }
    else
    {
        m_Character.stopDown();
    }
 
    if (Keyboard::isKeyPressed(Keyboard::LShift)) {
        m_Character.setSpeed(0.4);
    }
    else {
        m_Character.setSpeed(0.2);
    }
}
 
void Engine::update(float dtAsSeconds)
{
    m_Character.updateCh(dtAsSeconds);
}
 
void Engine::drawMap()
{
    m_Window.clear();
    for (int l = 0; l < LAYERS; l++) {
        m_map.setPosition(0, 0);
        for (int i = 0; i < HEIGHT_MAP; i++) {
            for (int j = 0; j < WIDTH_MAP; j++)
            {
                if (TileMap[l][i][j] == 'g') {
                    m_map.setTextureRect(IntRect(0, 0, 32, 32));
                    m_map.setPosition(j * 64, i * 64);
                    m_Window.draw(m_map);
                }
 
                if (TileMap[l][i][j] == 't') {
                    m_map.setTextureRect(IntRect(0, 32, 64, 64));
                    m_map.setPosition(j * 64, i * 64);
                    m_Window.draw(m_map);
                }
 
                if (TileMap[l][i][j] == 'b') {
                    m_map.setTextureRect(IntRect(0, 160, 32, 32));
                    m_map.setPosition(j * 64, i * 64);
                    m_Window.draw(m_map);
                }
 
                if (TileMap[l][i][j] == 'l') {
                    m_map.setTextureRect(IntRect(192, 160, 64, 32));
                    m_map.setPosition(j * 64, i * 64);
                    m_Window.draw(m_map);
                }
 
                if (TileMap[l][i][j] == 'L') {
                    m_map.setTextureRect(IntRect(224, 224, 32, 64));
                    m_map.setPosition(j * 64, i * 64);
                    m_Window.draw(m_map);
                }
 
                if (TileMap[l][i][j] == 'y') {
                    m_map.setTextureRect(IntRect(224, 192, 32, 32));
                    m_map.setPosition(j * 64, i * 64);
                    m_Window.draw(m_map);
                }
            }
        }
    }
 
    m_Window.draw(m_Character.getSprite());
    m_Window.setView(Cam);
    collision();
 
    m_Window.display();
}
 
void Engine::collision() {
    for (int i = (m_Character.getPos().y) / 64; i < (m_Character.getPos().y + 64) / 64; i++) {
        for (int j = (m_Character.getPos().x) / 64; j < (m_Character.getPos().x + 64) / 64; j++) {
            if (TileMap[1][i][j] == 'b') {
                if (m_Character.dy() > 0)
                {
                    m_Character.setY(i * 64 + 64);
                }
 
                if (m_Character.dy() < 0)
                {
                    m_Character.setY(i * 64 - 64);
                }
 
                if (m_Character.dx() > 0)
                {
                    m_Character.setX(j * 64 - 64);
                }
 
                if (m_Character.dx() < 0)
                {
                    m_Character.setX(j * 64 + 64);
                }
            }
        }
    }
}
character.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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#pragma once
#include <SFML\Graphics.hpp>
using namespace sf;
 
class Character
{
private:
    float Currentframe;
 
    Vector2f m_Position;
    Sprite m_Sprite;
    Texture m_Texture;
 
    bool m_LeftPressed;
    bool m_RightPressed;
    bool m_UpPressed;
    bool m_DownPressed;
 
    float m_Speed;
public:
    Character();
 
    Sprite getSprite();
 
    void moveLeft();
    void moveRight();
    void moveUp();
    void moveDown();
 
    void stopLeft();
    void stopRight();
    void stopDown();
    void stopUp();
 
    Vector2f getPos();
 
    void setY(float);
    void setX(float);
 
    void setSpeed(float);
 
    int dx();
    int dy();
 
    void updateCh(float elapsedTime);
};
character.cpp
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
135
#pragma once
#include "character.h"
 
Character::Character()
{
    Currentframe = 0;
 
    m_Speed = 0.2;
 
    m_Texture.loadFromFile("Textures/Character/male-1.png");
    m_Sprite.setTexture(m_Texture);
    m_Sprite.setScale(2, 2);
    m_Sprite.setTextureRect(IntRect(32, 0, 32, 32));
 
    m_Position.x = 64;
    m_Position.y = 64;
 
    m_DownPressed = false;
    m_UpPressed = false;
    m_RightPressed = false;
    m_LeftPressed = false;
}
 
Sprite Character::getSprite()
{
    return m_Sprite;
}
 
void Character::moveLeft()
{
    m_LeftPressed = true;
}
 
void Character::moveRight()
{
    m_RightPressed = true;
}
 
void Character::moveUp()
{
    m_UpPressed = true;
}
 
void Character::moveDown()
{
    m_DownPressed = true;
}
 
int Character::dx() {
    if (m_RightPressed) return 1;
    else if (m_LeftPressed) return -1;
    else return 0;
}
 
int Character::dy() {
    if (m_UpPressed) return 1;
    else if (m_DownPressed) return -1;
    else return 0;
}
 
void Character::setX(float x) {
    m_Position.x = x;
}
void Character::setY(float y) {
    m_Position.y = y;
}
 
void Character::stopLeft()
{
    m_LeftPressed = false;
    m_Sprite.setTextureRect(IntRect(32, 32, 32, 32));
}
 
void Character::stopRight()
{
    m_RightPressed = false;
    m_Sprite.setTextureRect(IntRect(32, 64, 32, 32));
}
 
void Character::stopDown()
{
    m_DownPressed = false;
    m_Sprite.setTextureRect(IntRect(32, 0, 32, 32));
}
 
void Character::stopUp()
{
    m_UpPressed = false;
    m_Sprite.setTextureRect(IntRect(32, 96, 32, 32));
}
 
Vector2f Character::getPos() {
    return m_Position;
}
 
void Character::setSpeed(float speed) {
    m_Speed = speed;
}
 
void Character::updateCh(float elapsedTime)
{
    if (m_RightPressed)
    {
        Currentframe += 0.005 * elapsedTime;
        if (Currentframe > 3) Currentframe -= 3;
        m_Sprite.setTextureRect(IntRect(32 * int(Currentframe), 64, 32, 32));
        m_Position.x += m_Speed * elapsedTime;
    }
 
    if (m_LeftPressed)
    {
        Currentframe += 0.005 * elapsedTime;
        if (Currentframe > 3) Currentframe -= 3;
        m_Sprite.setTextureRect(IntRect(32 * int(Currentframe), 32, 32, 32));
        m_Position.x -= m_Speed * elapsedTime;
    }
 
    if (m_UpPressed)
    {
        Currentframe += 0.005 * elapsedTime;
        if (Currentframe > 3) Currentframe -= 3;
        m_Sprite.setTextureRect(IntRect(32 * int(Currentframe), 96, 32, 32));
        m_Position.y -= m_Speed * elapsedTime;
    }
 
    if (m_DownPressed)
    {
        Currentframe += 0.005 * elapsedTime;
        if (Currentframe > 3) Currentframe -= 3;
        m_Sprite.setTextureRect(IntRect(32 * int(Currentframe), 0, 32, 32));
        m_Position.y += m_Speed * elapsedTime;
    }
 
    m_Sprite.setPosition(m_Position);
}
view.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
#include <SFML\Graphics.hpp>
 
View Cam;
 
void moveCam(float x, float y) {
    float x1 = x, y1 = y;
 
    if (x1 < 224) x1 = 224;
    if (y1 < 240) y1 = 240;
    if (x1 > 1632) x1 = 1632;
    if (y1 > 1648) y1 = 1648;
 
    Cam.setCenter(x1 + 32, y1 + 16);
    Cam.setSize(512, 512);
}
map.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
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
#pragma once
#include <SFML\Graphics.hpp>
 
const int HEIGHT_MAP = 30;
const int WIDTH_MAP = 30;
const int LAYERS = 2;
 
sf::String TileMap[LAYERS][HEIGHT_MAP] = {
    {
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg",
        "gggggggggggggggggggggggggggggg"
    },
    {
        "l l l l l l l l l l l l l l l ",
        "L   t    yy      b           L",
        "                       b      ",
        "L   b b           t          L",
        "      y     t          t      ",
        "L   b          b             L",
        "     b     y            b     ",
        "L              y   b         L",
        "         b                    ",
        "L  b            t      b     L",
        "        b          b          ",
        "L    t       t               L",
        "                      t       ",
        "L   b  y     b  y            L",
        "                    t     y   ",
        "L    t     b           b     L",
        "                   y     b    ",
        "L   b        t               L",
        "       b        b     b       ",
        "L   y                        L",
        "           b         b        ",
        "L   t                        L",
        "               t        t     ",
        "L b     y           b        L",
        "    t                         ",
        "L             b              L",
        "   b     b               t    ",
        "L  b               t         L",
        "             y          b     ",
        "l l l l l l l l l l l l l l l "
    }
};
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2021, 19:05
Ответы с готовыми решениями:

LNK1169: обнаружен многократно определенный символ - один или более
Всем привет. Кто знает, из-за чего может быть такая ошибка? Main: #include &quot;stdafx.h&quot; ...

Ошибка компоновки "LNK1169: обнаружен многократно определенный символ"
Привет, народ! Уже очень долго не могу разобраться со следующей проблемой, есть 4 маленьких файла:...

Ошибка линковки файлов при компиляции: "fatal error LNK1169: обнаружен многократно определенный символ"
Visual C++ 2008 Express Edition ошибка Компиляция... 1.cpp Компоновка... 2.obj : error...

Fatal error LNK1169: обнаружен многократно определенный символ - один или более
При компиляции возникает ошибка: 1&gt;Исходный код.obj : error LNK2005: &quot;public: __thiscall...

3
С чаем беда...
Эксперт CЭксперт С++
9975 / 5330 / 1458
Регистрация: 18.10.2014
Сообщений: 12,810
15.06.2021, 19:11 2
Лучший ответ Сообщение было отмечено Sam Wilde как решение

Решение

Цитата Сообщение от Sam Wilde Посмотреть сообщение
view.h
C++
1
View Cam;
Определение переменной с внешним связыванием в заголовочном файле.

Цитата Сообщение от Sam Wilde Посмотреть сообщение
view.h
C++
1
void moveCam(float x, float y) {
Определение функции с внешним связыванием в заголовочном файле.

Цитата Сообщение от Sam Wilde Посмотреть сообщение
map.h
C++
1
sf::String TileMap[LAYERS][HEIGHT_MAP]
Определение переменной с внешним связыванием в заголовочном файле.

Цитата Сообщение от Sam Wilde Посмотреть сообщение
Здравствуйте, ни с того ни с сего
Ни с того ни с сего?
2
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 2
15.06.2021, 19:41  [ТС] 3
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ни с того ни с сего?
Проблема в том, что такой код работал. Но после того как я отошел от пк на 15 минут (пк был заблокирован) все перестало работать.
Все ваши комментарии учел - раскидал все из view.h и map.h в engine и все снова заработало.
А вы бы не могли подсказать, можно ли как то исправить код, чтобы все-таки оставить в отдельных файлах (view.h и map.h)
0
С чаем беда...
Эксперт CЭксперт С++
9975 / 5330 / 1458
Регистрация: 18.10.2014
Сообщений: 12,810
15.06.2021, 20:11 4
Цитата Сообщение от Sam Wilde Посмотреть сообщение
Проблема в том, что такой код работал. Но после того как я отошел от пк на 15 минут (пк был заблокирован) все перестало работать.
Так не бывает.

Такой код может "работать", но только в том случае, когда каждый заголовочный файл включен ровно в один-единственный файл реализации. Но как только вы включаете такой заголовочный файл в несколько файлов реализации, вы, разумеется, получаете ошибку множественного определения. Что вы и наблюдаете в вашем случае.

Понятно, что из-за "я отошел от пк на 15 минут" такого изменения произойти не могло.

Цитата Сообщение от Sam Wilde Посмотреть сообщение
вы бы не могли подсказать, можно ли как то исправить код, чтобы все-таки оставить в отдельных файлах (view.h и map.h)
Что значит "в отделных файлах"? Оно у вас и так будет "в отделных файлах". Как же еще?

Помещать определения сущностей с внешним связыванием в заголовочные файлы можно только в случае, когда эти сущности объявлены inline. Вот и в вашем случае простейшим способом исправить ошибку будет просто добавление inline в определения этих переменных и функций.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2021, 20:11
Помогаю со студенческими работами здесь

Fatal error LNK1169: обнаружен многократно определенный символ - один или более
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;climits&gt; using std::cout; using std::cin;...

fatal error LNK1169: обнаружен многократно определенный символ - один или более
Задание по структурам данных. При запуске выдаёт такие ошибки: 1&gt;Lister.obj : error LNK2005:...

Fatal error LNK1169: обнаружен многократно определенный символ - один или более
Добрый день, подскажите пожалуйста как исправить ошибку? Есть заголовочный файл: #pragma once...

fatal error LNK1169: обнаружен многократно определенный символ - один или более
код который показан снизу я компилировал в двух программах на visual c++ и dev c++ в dev c++ всё...

fatal error LNK1169: обнаружен многократно определенный символ - один или более
Искала в интернете решение этой проблемы, находила похожие, но не помогло своей... В общем....

Обнаружен многократно определенный символ - один или более
Здравствуйте. Выскакивает ошибка: error LNK1169: обнаружен многократно определенный символ - один...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru