我得到了很多"重新定义x ....先前在这里定义的".请问这个错误是什么意思?
您需要限制每个文件仅包含一次.您可以通过两种方式完成此操作.
1)在头文件的顶部放置:
#pragma once
或2)如果您的编译器不支持,请放在头文件的顶部/末尾:
#ifndef _MYFILE_H_ #define _MYFILE_H_ ... #endif
将MYFILE替换为您的文件名,并将...替换为头文件的内容.
该错误表示存在已在一个位置定义的符号,并且已在另一个位置创建了备用定义.
如果在以下情况下会发生这种情况:
如果您定义两个具有相同名称的函数
如果函数和它的原型之间存在不匹配
在定义之前调用非平凡函数,并且没有原型
在最后一种情况下,实际函数与编译器在没有使用原型时所假定的"隐式声明"之间将存在不匹配.
可通过以下方式避免这些情况:
确保函数原型只声明一次
确保所有函数在其范围内具有唯一名称(即,如果它们是在文件中static
,或者如果在目标文件之间使用它们则是唯一的)
如果extern
在源文件中使用语句来声明原型,请小心.最好从相应的头文件中使用原型.
确保所有函数都有原型 - 在static
函数的情况下在源文件中,或者如果要由其他目标文件使用,则在头文件中.
通过使用Mehrdad和Brian R. Bondy建议的任一构造,确保每个源文件只能包含一次所有头文件
您可能包括两次头文件.确保头文件被#ifndef
语句包围.
http://www.fredosaurus.com/notes-cpp/preprocessor/ifdef.html