У меня есть проблема с этой ошибкой: "Переменная или поле объявлено недействительным".
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... Я новичок.
Dictionary
объявляется в main.cpp
но нигде больше; вы затем пытаетесь использовать его в function_dictionary.cpp
. Там не указано. Вам нужно будет поместить объявление Dictionary
в один из файлов заголовков, используя extern
, который включен обоими .cpp
файлами.
Этот вопрос полностью объясняет, как использовать Dictionary
между исходными файлами и показывает, как использовать ключевое слово extern
: как использовать extern для обмена переменными между исходными файлами?
Кроме того, обычно это .cpp
практика для #include
.cpp
файла. Это почти наверняка вызовет проблемы. Более распространенный шаблон - объявлять все в заголовках, а затем определять вещи в файлах .cpp
.
Проблема заключается в порядке включения:
во-первых, вы включаете function_dictionary.cpp
(через header.h
), который использует глобальный символ Dictionary
который строго определен после этого в main.cpp
Вы слишком сильно расходитесь с этими вещами, это не требуется.
Dictionary
(акцент делается на крошечный проект, обычно для больших проектов у вас гораздо более четкая организация файлов) ... или просто включите "header.h" после определение, но затем включите <map> и "class_word.h" .... перед определением словаря ...;)
.cpp
файлы. Смотрите ссылку в моем ответе для объяснения того, как разделить переменные в двух исходных файлах, используяextern
.