外部和重复的符号

时间:2015-03-14 18:45:56

标签: c++ c++11

我在C ++中构建一个递归下降解析器,并试图在字符和字符串之间定义一个映射。但是,当我尝试编译时,我得到一个重复的符号错误。

以下是代码:

  

parser.h

#include <iostream>
#include <string>
#include <map>

#ifndef PARSER_H
#define PARSER_H

extern std::map<char, std::string> tokens;

class Parser {
 public:
  Parser();
 private:

};

#endif
  

parser.cc

#include <string>
#include <map>
#include "parser.h"

std::map<char, std::string> tokens = {{'+', "PLUS"}, {'-', "MINUS"}, {'*', "STAR"}, {'/', "SLASH"}, {'(', "LPAR"}, {')', "RPAR"}};

Parser::Parser() 
{

}
  

calculator.cc

#include <iostream>
#include "parser.h"

int main()
{
    Parser RD_Parser;

    return 0;
}

当我发出make时,我明白了:

g++ -Wall -Werror -std=c++11 -g parser.o calculator.o -o Calculator
duplicate symbol _tokens in:
    parser.o
    calculator.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Calculator] Error 1

我猜它与extern定义有关,但我看过的例子与此非常相似。知道为什么在calculator.o

中重复这个问题

我正在使用clang 3.4.2。

0 个答案:

没有答案