当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《GCC编译器错误:"重新定义以前定义的"》经验,为你挑选了3个好方法。

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



1> Brian R. Bon..:

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

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

#pragma once

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

#ifndef _MYFILE_H_
#define _MYFILE_H_
...
#endif

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


由gcc和vc ++支持

2> Andrew Edgec..:

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

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

如果您定义两个具有相同名称的函数

如果函数和它的原型之间存在不匹配

在定义之前调用非平凡函数,并且没有原型

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

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

确保函数原型只声明一次

确保所有函数在其范围内具有唯一名称(即,如果它们是在文件中static,或者如果在目标文件之间使用它们则是唯一的)

如果extern在源文件中使用语句来声明原型,请小心.最好从相应的头文件中使用原型.

确保所有函数都有原型 - 在static函数的情况下在源文件中,或者如果要由其他目标文件使用,则在头文件中.

通过使用Mehrdad和Brian R. Bondy建议的任一构造,确保每个源文件只能包含一次所有头文件



3> Mehrdad Afsh..:

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

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

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有