//global_data.h #ifndef _absorption #define _absorption #include <iostream> class SpeciesRecord { public: /** Default constructor. */ SpeciesRecord() { std::cout << "creat a SpeciesRecord" << std::endl; } }; #endif
//array.h #ifndef _array #define _array #include <vector> #include <iostream> template<class base> class Array : public std::vector<base> { public: // Constructors: Array() : std::vector<base>() { std::cout << "creat a Array" << std::endl; } }; #endif
//global_data.h #ifndef _global_data #define _global_data #include "array.h" #include "absorption.h" class SpeciesRecord; namespace global_data { extern Array<SpeciesRecord> species_data; extern const double a; extern double b; const double c = 3;//const 定义时就要初始化 extern double d; } #endif
//species_data.h #ifndef _species_data #define _species_data //#include "array.h" //#include "absorption.h" void define_basic_species_data(void); #endif
//species_data.cpp #include "species_data.h" #include "global_data.h" #include <iostream> namespace global_data { Array<SpeciesRecord> species_data; //const 修饰容器后,不能增删出 const double a = 1; //定义时要与声明相同(同时使用const或者都不用) double b = 2; double d = 4; } void define_basic_species_data(void) { std::cout << "define_basic_species_data" << std::endl; using global_data::species_data; using global_data::a; using global_data::b; using global_data::c; using global_data::d; //double d = 4; //不能写在这里,应在相同namespace中 species_data.push_back(SpeciesRecord()); std::cout << "a=" << a << std::endl; std::cout << "b=" << b << std::endl; std::cout << "c=" << c << std::endl; std::cout << "d=" << d << std::endl; }
//main.cpp #include "global_data.h" #include <iostream> #include "species_data.h" using namespace std; int main(void) { using global_data::species_data; define_basic_species_data(); system("pause"); return 0; }