class Store store уже определен в main.obj
Нужна помощь с запуском простого проекта. Суть такая: есть файл main.cpp, туда добавляю модуль State, внутри которого должен храниться инстанс класса Store. Но при запуске выдает ошибку:
class Store store уже определен в main.obj"
Структура кода такая:
файл main.cpp:
#include "State.cpp"
#include <stdio.h>
int main() {
printf("123");
return 0;
}
файл State.cpp:
#include "Store.h"
Store store;
файл Store.cpp:
#include "Store.h"
файл Store.h:
#pragma once
class Store
{
};
Нашел подобный вопрос здесь, но у меня возникло еще больше вопросов. Как я понял нужно подключать только заголовочные файлы, а не cpp расширения. Тогда и для State нужно завести расширение .h, правильно? Я так понимаю если файлы Store.h это заголовки класса, то нужно саму логику писать в Store.cpp и класс продублировать? Т.е. допустим у меня в классе есть методы, то в cpp я пишу реализацию, а в h только имя метода(сигнатуру) или как? Но тогда у меня в консоль падает ошибка: "переопределение типа class". Можете помочь что куда нужно писать и где что должно находиться?
Ответы (1 шт):
Вообще-то, так:
Store.h
...
extern Store store;
main.cpp
#include "State.h"
#include <stdio.h>
Обычно (подчеркиваю — обычно, но не без исключений)
- объявление класса — в заголовочном файле
- реализация класса — в .cpp-файле
- объекты класса — там, где используются. Если есть какие-то ну очень важные причины в наличии глобального объекта, как у вас — его объявление как
externв заголовочном файле, определение — в одном из .cpp. Есть также вариант сinline-объявлением.
