C++ Error:C2011: 'struct' type redefinition

C++ Error:C2011: ‘struct‘ type redefinition

在c语言中,对同一个变量或者函数进行多次声明是不会报错的。所以如果h文件里只是进行了声明工作,即使不使用# ifndef宏定义,一个c文件多次包含同一个h文件也不会报错。
  但是在c++语言中,#ifndef的作用域只是在单个文件中。所以如果h文件里定义了全局变量,即使采用#ifndef宏定义,一个c文件包含同一个h文件多次还是会出现全局变量重定义的错误。
  使用#ifndef可以避免下面这种错误:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;如果加了#ifndef,则不会出现这种错误。
    最好把头文件的内容都放在#ifndef和#endif中。不管头文件会不会被多个文件引用,都要加上这个。一般格式是这样的:
  #ifndef <标识>
  #define <标识>
  ......
  ......
  #endif
  <标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前面加下划线,并把文件名中的“.”也变成下划线,如:stdio.h
  #ifndef _STDIO_H
  #define _STDIO_H
  ......
  #endif
   条件编译有三种形式,理解了其中一种以后碰到了再收即可。(转自网络)

C++ Error:C2011: 'struct' type redefinition

时间: 2024-10-10 06:41:19

C++ Error:C2011: 'struct' type redefinition的相关文章

VC中编译报错:error C2011: &#39;fd_set&#39; : &#39;struct&#39; type redefinition

这是头文件包含顺序的问题,原因与解决办法见下面代码的注释. /* 包含下面这两个头文件时,必须把winsock2.h放在前面 否则编译报错,N多的重定义错误:例如 error C2011: 'fd_set' : 'struct' type redefinition */ #include <WinSock2.h> #include <Windows.h> int main(int argc, _TCHAR* argv[]) { Sleep(1); return 0; } 其实可以不

解决error C2011: &#39;fd_set&#39; : &#39;struct&#39; type redefinition的方法

http://www.cnblogs.com/ark-zhang/archive/2013/06/19/3144383.html 首先说明这个问题由于重复定义引起的编译错误. 先说明解决方法,然后再说是什么原因导致了这个问题. 解决方法: 下列任何一种方法都可以. 1. 在所有包含windows.h的代码之前加上 #define  WIN32_LEAN_AND_MEAN 2. 或者直接在工程的properties( vc6 以上)/Setting(vc6) -> c/c++ -> prepro

scala 2.11报错error: not found: type Application

FROM: http://j-q-j.org/scala/scala-2-11-application-error.html 这两天学习scala,官网下载的最新版本2.11,书用的是<Programming in scala>,看到类和对象,这一章最后一段代码 1 2 3 4 5 import ChecksumAccumulator.calculate object FallWinterSpringSummer extends Application {   for (season <

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int(转)

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 错误类型: 缺失类型表述 错误原因: 函数前未写函数的返回类型,由此导致了这个错误 解决方法: 以后写函数,不管是声明还是定义,都要加上返回类型,尤其是返回类型是VOID时,更要加上 不要省略 error C4430: missing type specifier - int assumed. Note: C++ do

【error LNK2005: "struct HWND__ * ui_hwnd" ([email&#160;protected]@[email&#160;protected]@A) 已经在 Susake.obj 中定义】

产生原因:多文件包含时,全局变量未用extern 解决方法:直接在全局变量前加上extern即可,若要在在其他文件中使用,该变量声明下就ok了~~ 另外引出一个话题,你是不是也发现了这么一个现象?? 比如 A.h A.cpp #include "A.h" #include "B.h" HWND ui_hwnd, hwnd; int main(int argc, char *argv[]) { ui_hwnd = hwnd; return 0; } B.h B.cpp

一个关于调用函数函参写void的错误error C2143 syntax error missing &#39;)&#39; before &#39;type&#39;

error C2143 syntax error missing ')' before 'type' 错误代码: srand((unsigned)clock(void)); 错误原因: 画蛇添足的写了void 修改: 把void去掉即可 总结: void代表空,就是实实在在的什么都没有,除非是在声明,否则平常用的时候就是空. 一个关于调用函数函参写void的错误error C2143 syntax error missing ')' before 'type'

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

最近发现一个奇怪的错误,错误提示如下: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 出现该段错误的源码(某公司校招技术笔试题)如下: #include<iostream> using namespace std; main() { long x=65530; long countx=0; while(x) { countx++; x=x&(x-1);

[virsh] error: unknown OS type hvm解决办法

今天在linux服务器上编译安装升级了下qemu,升级命令如下: [email protected]:/opt/qemu-2.0.0# ./configure --prefix=/usr/local/ --target-list=x86_64-softmmu [email protected]:/opt/qemu-2.0.0# make [email protected]:/opt/qemu-2.0.0# make install 顺利编译安装后,去define了一个虚拟机,结果报了如下错误:

syntax error : missing &#39;;&#39; before &#39;type&#39;

#include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { char a[] = {'a','b','c','d','e'}; char b[] = "abcde"; char c[][3] = {{ 'a' , 'b' , 'c' },{ 'd' , 'e' , 'f' },{ 'g' ,'h' , 'j' },{ 'k' , 'h' , 'l' }}; char *p =