【发布时间】:2010-10-17 00:20:00
【问题描述】:
我收到很多“重新定义 x....x 之前在这里定义的内容”。请问这个错误是什么意思?
【问题讨论】:
标签: c++ gcc compiler-construction
我收到很多“重新定义 x....x 之前在这里定义的内容”。请问这个错误是什么意思?
【问题讨论】:
标签: c++ gcc compiler-construction
您需要限制每个文件只包含一次。您可以通过 2 种方式做到这一点。
1) 在头文件的顶部放置:
#pragma once
或 2) 如果您的编译器不支持,请将其放在头文件的顶部/末尾:
#ifndef _MYFILE_H_
#define _MYFILE_H_
...
#endif
将 MYFILE 替换为您的文件名,并将 ... 替换为头文件的内容。
【讨论】:
错误意味着有一个符号已在一个地方定义,而另一个定义已在另一个地方进行。
在以下情况下可能会发生这种情况:
在最后一种情况下,实际函数与编译器在没有原型可供使用时假定的“隐式声明”之间存在不匹配。
这些情况可以通过以下方式避免:
static,则在文件中,或者如果它们在目标文件之间使用,则它们是唯一的)extern 语句来声明原型时要小心。最好使用相应头文件中的原型。static 函数,则在源文件中,如果要由其他目标文件使用,则在头文件中。【讨论】:
您可能包含两次头文件。确保您的头文件被#ifndef 语句包围。
http://www.fredosaurus.com/notes-cpp/preprocessor/ifdef.html
【讨论】:
同样的事情发生在我身上,这是因为我不小心包含了 .c/.cpp 文件(在其中)而不是头文件。
那肯定会让你犯很多错误。
【讨论】: