加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

命名空间变量的多重定义,C编译

发布时间:2020-12-16 05:51:49 所属栏目:百科 来源:网络整理
导读:我正在写一个简单的Makefile,看起来像这样 CC=gccCXX=g++DEBUG=-gCOMPILER=${CXX}a.out: main.cpp Mail.o trie.o Spambin.o ${COMPILER} ${DEBUG} main.cpp Mail.o trie.o Re2/obj/so/libre2.sotrie.o: trie.cpp ${COMPILER} ${DEBUG} -c trie.cppMail.o: Ma
我正在写一个简单的Makefile,看起来像这样
CC=gcc
CXX=g++
DEBUG=-g
COMPILER=${CXX}
a.out: main.cpp Mail.o trie.o Spambin.o
        ${COMPILER}  ${DEBUG} main.cpp Mail.o trie.o Re2/obj/so/libre2.so

trie.o: trie.cpp
        ${COMPILER}  ${DEBUG} -c trie.cpp

Mail.o: Mail.cpp
        ${COMPILER} ${DEBUG} -c Mail.cpp

Spambin.o: Spambin.cpp
        ${COMPILER} ${DEBUG} -c Spambin.cpp

clean: 
        rm -f *.o

我有一个文件名config.h,这是Mail.cpp和Spambin.cpp所必需的,所以我有
#include“config.h”在Mail.cpp和Spambin.cpp中. config.h看起来像这样:

#ifndef __DEFINE_H__
#define __DEFINE_H__

#include<iostream>

namespace config{
        int On = 1;
        int Off = 0;

        double S = 1.0;
}
#endif
But when I try to compile the code it gives me
Mail.o:(.data+0x8): multiple definition of `config::On'
/tmp/ccgaS6Bh.o:(.data+0x8): first defined here
Mail.o:(.data+0x10): multiple definition of `config::Off'
/tmp/ccgaS6Bh.o:(.data+0x10): first defined here

有人可以帮我调试吗

解决方法

您不能分配到头文件中的命名空间变量.这样做定义了变量,而不是仅仅声明它们.将它放在一个单独的源文件中,并将其添加到Makefile中,它应该工作.

编辑另外,你必须在头文件extern中进行声明.

所以在头文件中,命名空间应该如下所示:

namespace config{
    extern int On;
    extern int Off;

    extern double S;
}

并在源文件中:

namespace config{
    int On = 1;
    int Off = 0;

    double S = 1.0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读