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

代码:
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,即可正常使用。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值