Множественные определения переменных со структурамиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Множественные определения переменных со структурами

Сообщение Anonymous »

Я начал работать со структурами, и мне сложно разбить их на файлы .h и .cpp. Я понимаю, что .h обычно используется для объявлений, а .cpp — для определений. Проблема, с которой я столкнулся, заключается в том, что я не могу понять, как определить стандартные переменные для двух отдельных структур, если эти переменные имеют одинаковые имена.
Я думаю, моя проблема в том, что три переменные для каждой структуры не связаны внутри них (ошибка 1). Я попытался извлечь эти переменные из файлов .cpp, но затем столкнулся с проблемой: переменные в void Reset() не были объявлены в этой области.
Что я такое попытка добиться наличия этих переменных в структуре со значениями по умолчанию. Функция Reset() при вызове сбрасывает эти значения.
Я запускаю из Konsole следующее: g++ -o main cpu.cpp main.cpp && . /main
Ошибка 1
/usr/bin/ld: /tmp/ccwb32XV.o:(.bss+0x3): multiple definition of `PS'; /tmp/ccY9ydGx.o:(.data+0x3): first defined here
collect2: error: ld returned 1 exit status

Ошибка 2
cpu.cpp:9:5: error: ‘PC’ was not declared in this scope
9 | PC = 0xFFFC;

cpu.h
#include

struct CPU
{
std::uint16_t PC;
std::uint8_t SP;
std::uint8_t PS;

void Reset();
};

cpu.cpp
#include "cpu.h"

std::uint16_t PC = 0x1234;
std::uint8_t SP = 0x56;
std::uint8_t PS = 0b10101010;

void Reset()
{
PC = 0xFFFC;
SP = 0xFF;
PS = 0b00010000;
}

ppu.h
#include

struct PPU
{
std::uint16_t X;
std::uint8_t Y;
std::uint8_t PS;

void Reset();
void PrintSomething();
};

ppu.cpp
#include
#include
#include "ppu.h"

std::uint16_t X = 0x1010;
std::uint8_t Y = 0x99;
std::uint8_t PS = 0b11001100;

void Reset()
{
PC = 0xAABC;
SP = 0x02;
PS = 0b00000110;
}

void PrintSomething()
{
std::cout

Подробнее здесь: https://stackoverflow.com/questions/793 ... th-structs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»