我得到了很多“重新定义之前在此定义的x .... x”。请注意这个错误是什么意思?
答案 0 :(得分:30)
您需要限制每个文件仅包含一次。您可以通过两种方式完成此操作。
1)在头文件的顶部放置:
#pragma once
或2)如果您的编译器不支持,请将其放在头文件的顶部/末尾:
#ifndef _MYFILE_H_
#define _MYFILE_H_
...
#endif
将MYFILE替换为您的文件名,并将...替换为头文件的内容。
答案 1 :(得分:10)
错误意味着在一个地方定义了一个符号,并在另一个地方制作了另一个定义。
如果遇到以下情况,可能会发生这种情况:
在最后一种情况下,实际函数与编译器在没有原型使用时所假定的“隐式声明”之间将存在不匹配。
可以通过以下方式避免这些情况:
static
,则在文件中,或者如果在目标文件之间使用它们则是唯一的)extern
语句来声明原型,请务必小心。最好使用相应头文件中的原型。static
函数的情况下在源文件中,或者如果要由其他目标文件使用,则在头文件中。答案 2 :(得分:7)
您可能包含两次头文件。确保您的标头文件被#ifndef
语句包围。
http://www.fredosaurus.com/notes-cpp/preprocessor/ifdef.html
答案 3 :(得分:0)
同样的事情发生在我身上,这是因为我意外地包含了.c / .cpp文件(在其中)而不是头文件。
这肯定会给你带来很多错误。