Переопределение конструктора - PullRequest
3 голосов
/ 28 марта 2020

Я только недавно начал изучать C ++, так что я совершенно новый, хотя я пришел с Java. Я делаю игру как мой первый маленький проект. Я хочу, чтобы мой класс проигрывателя был отделен от основного файла. У меня есть мой заголовочный файл и файл cpp, составленный так:

Заголовок:

#pragma once

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

class Entity {
    public:
        Entity(int x, int y, sf::RenderWindow& win) : window(win) {}
        void tick();
        void render();
    private:
        int x;
        int y;
        float velX;
        float velY;
        sf::RenderWindow& window;
        bool keys[264] = {};
};

C ++:

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

#include "headers/Entity.h"

using namespace sf;

Texture texture;
Sprite sprite;

Entity::Entity(int x, int y, RenderWindow& win) : window(win) {
    this->x = x;
    this->y = y;
    this->velX = 0;
    this->velY = 0;
    this->window = win;


    texture.loadFromFile("../res/img/test.png");
    sprite(texture);
}

void Entity::tick() {

    // movement
}

void Entity::render() {
    this->window.draw(sprite);
}

Но в файле cpp конструктор продолжает говорить:

redefinition of 'Entity::Entity(int, int, sf::RenderWindow&)'

Я много раз искал, как это исправить, но не могу найти ничего, что работает, потому что эта проблема не зависит от того, что я пытаюсь. Я бы предпочел теорию так же, как я новичок с любым ответом. Спасибо.

Ответы [ 2 ]

4 голосов
/ 28 марта 2020

Ваш заголовок предоставляет реализацию / определение вашего конструктора:

    Entity(int x, int y, sf::RenderWindow& win) : window(win) {}

Как и ваш исходный файл.

Измените заголовок, чтобы он просто содержал объявление:

    Entity(int x, int y, sf::RenderWindow& win);
0 голосов
/ 28 марта 2020

Удалить следы {} и ссылку на ctor суперкласса в файле объявления для конструктора, ie:

class Entity {
  public:
    Entity(int x, int y, sf::RenderWindow& win);
    void tick();

С {} и : window(win) больше не является объявление, но определение, поэтому у вас будет два определения: одно в заголовке и одно в источнике ...

Удалите одно из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...