C++命名空间里面定义变量出现重定义错误

转自:https://blog.csdn.net/SuperVictim/article/details/50458259

代码: 
head.h:

#include <iostream>

namespace mySpace
{
    class Out
    {
    public :
        void print();
    private :
    protected :

    };

    Out o;//这里定义的变量


    namespace mySpace_Inner
    {
        class Inner
        {
        public :
            void print();
        private :
            Out o;

        protected :

        };
    }
}

head.cpp:

#include "head.h"

namespace mySpace
{
    void Out::print()
    {
        std::cout << "I'm out!" << std::endl;
    }
    namespace mySpace_Inner 
    {
        void Inner::print()
        {
            std::cout << "I'm Inner!" << std::endl;
            o.print();
            std::cout << "endl" << std::endl;
        }
    }


}

main.cpp:

#include <cstalib>
#include "head.h"
int main()
{
    mySpace::mySpace_Inner::Inner i;

    mySpace::o.print();//报错

    system("pause");
}

按照上面的方式在命名空间里面定义一个Out的变量,在main.cpp里面使用的时候将会报o变量重定义错误,原因如下: 
这里一共创建了三个文件,一个头文件,两个cpp文件,其中head.cpp包含了head.h,而main.cpp也包含了head.h而Out o这样定义变量属于声明并定义,所以这个头文件被包含了几次这个o变量将被定义了几次,所以如果要改变的话就只能将Out o这样定义变成extern Out o;这个时候就不是声明并定义了,而只是声明。然后在head.cpp文件中再定义一下这个Out o,即可正常使用。
 

©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页