Не могу сохранить значения переменной через заголовочные файлы - PullRequest
0 голосов
/ 17 февраля 2020

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

По какой-то причине, когда я пытаюсь получить доступ к значению переменной, он всегда сбрасывается. Есть проблема с моим кодом или это ссылка?

Поскольку я работаю со структурами, я хочу, чтобы первый узел структуры всегда был одинаковым (пустой вариант 1), я пытался использовать extern, но это не помогает.

Ах файл

using namespace std;


struct nodeChar
{
    char character;
    struct nodeChar *next;
    struct nodeChar *previous;
};

extern nodeChar *firstChar = new nodeChar();
extern nodeChar *previousChar = new nodeChar();
extern nodeChar *sentinelCharacter = new nodeChar();

void addCharacterNode(nodeChar *newCharacter)
{

    sentinelCharacter = firstChar;

    if(firstChar->character == NULL)
    {
        firstChar = newCharacter;
    }
    else while(sentinelCharacter != NULL)
    {
        if(sentinelCharacter->next = NULL)
        {
            newCharacter->previous = sentinelCharacter;
            sentinelCharacter->next = newCharacter;
            break;
        }

        sentinelCharacter = sentinelCharacter->next;
    }
}

Bh файл

#include <iostream>
#include <string>

#include "TextStructure.h"
#include <curses.h>

void option1()
{
    printMenuOption1();
    int x = 1;
    int y = 7;
    bool keepWriting = TRUE;
    nodeChar *pressedCharacter = new nodeChar();

    while(keepWriting)
    {
        int key = getch();

        switch(key)
        {
            case '9':
                keepWriting = FALSE;
                clear();
                break;
            case '8':
                saveFile();
                printMenuOption1();
                break;
            case '7':

                break;

            default:
                pressedCharacter->character = key;
                addCharacterNode(pressedCharacter);
                mvprintw(y, x, "%c", firstChar->character); /*This is where it prints a character. 
It prints the key pressed. But when I write again, it should still print the first character, not the key pressed. And it prints the key pressed. */

                if(x == 68)
                {
                    x = 1;
                    y++;
                } else
                {
                    x++;
                }
                break;

        }
    }
}

Надеюсь, я правильно разместил вопрос. Не профи на C ++, любой совет хорошо принят.

1 Ответ

0 голосов
/ 17 февраля 2020

Первый: код написан в предположении, что 'next' и 'previous' получат NULL, когда структура выделена оператором 'new'. Обычно это не тот случай, если этим указателям явно не присваивается значение NULL, тогда они получают случайные значения. Вам необходимо присвоить значения 'next' и 'previous' NULL после 'new'.

Second: Вы выделяете значение 'selectedCharacter' только один раз, до l oop:

bool keepWriting = TRUE;
**nodeChar *pressedCharacter = new nodeChar();**

Так Вы всегда назначаете символ одной и той же структуре. Жирная линия должна быть внутри l oop.

...