2014-02-19 62 views
0

我有這個錯誤的一個問題:「變量或現場宣佈無效」。C++錯誤「變量或現場宣佈無效」

的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)); 
} 

最後一個文件我有錯誤...我該如何解決? 我認爲這是一個不好的頭文件,但我無法解析的時候...... 幫我請...我是一個新手。

回答

1

Dictionarymain.cpp聲明,但無處;然後你試圖在function_dictionary.cpp中使用它。它在那裏沒有宣佈。你將需要投入的Dictionary聲明在頭文件中的一個,使用extern,這是由兩個.cpp文件包括在內。

這個問題充分說明了如何同時共享源文件之間Dictionary,並展示瞭如何使用extern關鍵字:How do I use extern to share variables between source files?

而且,它通常是不好的做法,#include一個.cpp文件。這幾乎肯定會導致問題。更常見的模式是聲明一切都在頭部,然後.cpp文件中定義事情。

+0

我該如何解決這個問題,不使用太多包括? –

+0

包括很好,​​只是不包含'.cpp'文件。請參閱我的答案中的鏈接,瞭解如何使用'extern'在兩個源文件中共享變量。 – TypeIA

0

的問題是包容的順序爲:它採用全局符號Dictionary這是在main.cpp

後嚴格定義

首先,你包括function_dictionary.cpp(通過header.h)你分手了太多這類包括事情,這不是必需的。

+0

是的,我認爲這是...我如何解決這個問題?什麼是包括不需要的? –

+1

因爲這是一個小項目,在你定義'Dictionary'的地方放置main.cpp中的所有方法(強調在小項目上,通常對於更大的項目,你有更清晰的文件組織)或者只包含「標題」。小時「,但後來包括和」class_word.h「....在詞典定義...之前;); – fritzone