Flex / Bison-如何解决v“ symtab”的多个定义”

问题描述 投票:0回答:1

我重新创建了advanced calculator from the book "flex & bison",并对c ++进行了一些小的改动。但是我无法解决的是编译时出现以下错误。

C:\..\BisonFlexCalculator/Includes/calc.hpp:17: multiple definition of 'symtab'
C:\..\BisonFlexCalculator/Includes/calc.hpp:17: first defined here
C:\..\BisonFlexCalculator/Includes/calc.hpp:17: multiple definition of 'symtab'
C:\..\BisonFlexCalculator/Includes/calc.hpp:17: first defined here
collect2.exe: error: ld returned 1 exit status

我在声明了symtab的.hpp文件中有一个头保护,但是它说它有多个定义。我已将代码上传到github-repo。有人可以帮助我了解我在做什么以及如何解决我的问题吗?

谢谢!

c++ bison flex-lexer
1个回答
0
投票

问题是您在头文件中定义了变量symbol symtab[NHASH]。每个包含此标头的源文件都将定义该符号。由于所有源文件都包含此头文件,因此您将对同一对象具有多个定义,因此违反了ODR(一个定义规则),因此会出现错误消息。

我看到symtab仅在calcfunction.cpp中使用,您可以将其移动到该文件吗?否则,您可以通过将其标记为extern来确保仅在标头中声明它(请看此答案:How do I use extern to share variables between source files?)。

© www.soinside.com 2019 - 2024. All rights reserved.