Ошибка C ++ «Переменная или поле объявлено пустым»

0

У меня есть проблема с этой ошибкой: "Переменная или поле объявлено недействительным".

main.cpp

#include "header.h"

//Map per gestire il dizionario
std::map <std::string, Word> Dictionary;

int main()
{
    create_word();
    return 0;
}

header.h

#include <iostream> //Libreria I/O
#include <string> //Libreria per le String
#include <map> //Libreria per le Map
#include "class_word.h" //Libreria con classe Word
#include "function_dictionary.cpp" //Funzioni sul dizionario
#include "function_word.cpp" //Funzioni sulla classe Word

class_word.h

//Classe Word, rappresenta la parola del dizionario
class Word {
//Attributi privati della classe Word
private:
    std::string value; //Valore
    std::string desc; //Descrizione

//Metodi pubblici della classe Word
public:
    Word() {} //Costruttore
    Word(std::string val, std::string des) {value=val; desc=des;} //Costruttore con argomenti
    ~Word(){} //Distruttore
    std::string get_Value() {return value;} //Metodo per prendere la parola
    std::string get_Desc() {return desc;} //Metodo per prendere la descrizione
};

function_word.cpp

//Funzione per la creazione di una word
void create_word ()
{
    //Dichiarazione variabili
    std::string word, description;

    std::cout << "Parola: "; std::cin >> word;
    std::cout << "Descrizione: "; std::cin >> description;

    //Creazione Word
    Word temp(word, description);

    //Inserimento nel dizionario
    insert_dictionary(temp);
}

function_dictionary.cpp

//Funzione per inserire la parola nel dizionario
void insert_dictionary (Word temp)
{
    Dictionary.insert(make_pair(temp.get_Value(), temp));
}

В последнем файле у меня есть ошибка... Как я могу решить? Я думаю, что это был плохой файл, но я не могу его решить... Помогите мне, PLS... Я новичок.

Теги:

2 ответа

1

Dictionary объявляется в main.cpp но нигде больше; вы затем пытаетесь использовать его в function_dictionary.cpp. Там не указано. Вам нужно будет поместить объявление Dictionary в один из файлов заголовков, используя extern, который включен обоими .cpp файлами.

Этот вопрос полностью объясняет, как использовать Dictionary между исходными файлами и показывает, как использовать ключевое слово extern: как использовать extern для обмена переменными между исходными файлами?

Кроме того, обычно это .cpp практика для #include .cpp файла. Это почти наверняка вызовет проблемы. Более распространенный шаблон - объявлять все в заголовках, а затем определять вещи в файлах .cpp.

  • 0
    Как я могу решить эту проблему, чтобы не использовать много включить?
  • 0
    Включения в порядке, просто не включайте .cpp файлы. Смотрите ссылку в моем ответе для объяснения того, как разделить переменные в двух исходных файлах, используя extern .
0

Проблема заключается в порядке включения:

во-первых, вы включаете function_dictionary.cpp (через header.h), который использует глобальный символ Dictionary который строго определен после этого в main.cpp

Вы слишком сильно расходитесь с этими вещами, это не требуется.

  • 0
    Да, я думаю, что это ... Как я могу решить эту проблему? Какие включения не требуются?
  • 1
    так как это крошечный проект, поместите все методы в main.cpp после того, как вы определите Dictionary (акцент делается на крошечный проект, обычно для больших проектов у вас гораздо более четкая организация файлов) ... или просто включите "header.h" после определение, но затем включите <map> и "class_word.h" .... перед определением словаря ...;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню