Ошибка Visual C ++ LNK2005: имя переменной уже определено в filename.obj (с использованием SFML) - PullRequest
0 голосов
/ 26 февраля 2019

В моем проекте 3 файла: main.cpp, Globals.h & Globals.cpp:

main.cpp

#include "Globals.h"

int main()
{
if (setup())return 1;//If setup fails terminate the program
CenterOrigin(playerSprite);
while (window.isOpen())
    {
    deltaTime = deltaClock.restart().asSeconds();
    while (window.pollEvent(ev))
       {
        if (ev.type == sf::Event::Closed)window.close();
       }
    float rotSpeed = 5;

    window.clear(sf::Color(12, 14, 12, 0.9 * 255));

    window.display();
    }
return 0;
}

Globals.h

#pragma once

#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>  
#include <SFML/System.hpp>

#define TITLE "Belty McBelth"
#define WIDTH 1280
#define HEIGHT 720

sf::RenderWindow window;
sf::Font font; 
sf::Event ev; 
sf::Texture playerTex; 
sf::Sprite playerSprite; 
sf::Texture tieTex; 
sf::Sprite tieSprite; 

sf::Clock deltaClock;
float deltaTime; //Time since last frame in seconds

int setup();
void CenterOrigin(sf::Sprite & t);

Globals.cpp

#include "Globals.h"

int setup()
{
    window.create(sf::VideoMode(WIDTH, HEIGHT), "Belty McBelth", sf::Style::Close);
    if (!font.loadFromFile("../comic.ttf"))return 1;
    if (!playerTex.loadFromFile("../PLAYER.png"))return 1;
    playerSprite = sf::Sprite(playerTex);
    std::cout << "Setup completed without errors \n";
    return 0;
}

void CenterOrigin(sf::Sprite & t)
{
    sf::FloatRect d = t.getLocalBounds();
    t.setOrigin(d.width / 2, d.height / 2);
}

Всякий раз, когда я пытаюсь построить этот проект, я получаю множество ошибок LNK2005, по одной на каждую переменную, которая объявлена ​​ в заголовочном файле globals.Я искал решение этой проблемы, однако я не могу найти его.Я удостоверился, что в файле globals.h нет определений, однако я все еще не могу построить проект.

Эта проблема решается сама собой, если я переместлю все определения в файл .h, однако,На странице Microsoft по поводу ошибки lnk2005 я обнаружил, что это только потому, что существует только один файл, содержащий заголовочный файл globals.

Sidenote, есть ли лучший способ обработки глобальных переменных / функций?Extern - вариант, но он становится слишком громоздким, когда у вас много глобальных переменных.

...