首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC编译器错误:"redefinition...previously已定义“

GCC编译器错误:"redefinition...previously已定义“
EN

Stack Overflow用户
提问于 2009-04-02 01:00:37
回答 4查看 59.2K关注 0票数 17

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

EN

回答 4

Stack Overflow用户

发布于 2009-04-02 01:18:41

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

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

代码语言:javascript
复制
#pragma once

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

代码语言:javascript
复制
#ifndef _MYFILE_H_
#define _MYFILE_H_
...
#endif

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

票数 38
EN

Stack Overflow用户

发布于 2009-04-02 07:09:04

该错误意味着在一个地方定义了一个符号,而在另一个地方定义了另一个符号。

在以下情况下可能会发生这种情况:

  • 如果您定义了两个同名的函数
  • 如果一个函数与其原型
  • 不匹配,则在定义该函数之前调用一个非常重要的函数,并且不使用原型

在最后一种情况下,当编译器没有原型可用时,实际函数和“隐式声明”之间将会出现不匹配。

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

确保函数原型只声明为once

  • Ensuring的
  • 确保所有函数在其作用域内具有唯一的名称(即,
  • 在源文件中使用extern语句声明原型时要小心。通过使用Mehrdad和BrianR.Bondy

files.

  • Ensure建议的构造之一,
  • 确保所有函数都具有原型-如果是static函数,则在源文件中;如果要由其他对象使用,则在头文件中。对于每个源文件,所有头文件只能包含一次
票数 13
EN

Stack Overflow用户

发布于 2009-04-02 01:03:08

您可能包含一个头文件两次。确保您的头文件被#ifndef语句包围。

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/707920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档