GCC编译器错误:"重新定义...以前定义的"

13 c++ compiler-construction gcc

我得到了很多"重新定义x ....先前在这里定义的".请问这个错误是什么意思?

Bri*_*ndy 32

您需要限制每个文件仅包含一次.您可以通过两种方式完成此操作.

1)在头文件的顶部放置:

#pragma once
Run Code Online (Sandbox Code Playgroud)

或2)如果您的编译器不支持,请放在头文件的顶部/末尾:

#ifndef _MYFILE_H_
#define _MYFILE_H_
...
#endif
Run Code Online (Sandbox Code Playgroud)

将MYFILE替换为您的文件名,并将...替换为头文件的内容.

  • 由gcc和vc ++支持 (2认同)

And*_*mbe 11

该错误表示存在已在一个位置定义的符号,并且已在另一个位置创建了备用定义.

如果在以下情况下会发生这种情况:

  • 如果您定义两个具有相同名称的函数
  • 如果函数和它的原型之间存在不匹配
  • 在定义之前调用非平凡函数,并且没有原型

在最后一种情况下,实际函数与编译器在没有使用原型时所假定的"隐式声明"之间将存在不匹配.

可通过以下方式避免这些情况:

  • 确保函数原型只声明一次
  • 确保所有函数在其范围内具有唯一名称(即,如果它们是在文件中static,或者如果在目标文件之间使用它们则是唯一的)
  • 如果extern在源文件中使用语句来声明原型,请小心.最好从相应的头文件中使用原型.
  • 确保所有函数都有原型 - 在static函数的情况下在源文件中,或者如果要由其他目标文件使用,则在头文件中.
  • 通过使用Mehrdad和Brian R. Bondy建议的任一构造,确保每个源文件只能包含一次所有头文件


Meh*_*ari 7

您可能包括两次头文件.确保头文件被#ifndef语句包围.

http://www.fredosaurus.com/notes-cpp/preprocessor/ifdef.html