我写一个class,然后几个文件都要用到它.
该怎么写?都#include的话,就出现重复定义的错误?
用extern?
如果是一个struct呢?

解决方案 »

  1.   

    abc.h文件这样写#ifndef __OLDWORM_DEFINE_ABC_H__
    #define __OLDWORM_DEFINE_ABC_H__
    #pragma once...#endif这是我的风格,其实#pragma once也是可以省略的,这是双保险写法。
      

  2.   

    #ifndef
    #define
    看一下MSDN~
      

  3.   

    ........
    还是有点糊涂.
    比如说变量我可以用extern,但是class用不了吗?
      

  4.   

    还有,如果我没有为我的class写头文件,就在一个cpp文件里声明并定义了,
    那怎么在其他文件中用它啊?
      

  5.   

    当然了,楼上介绍的是windows和unix下的标准方法,如果你自动生成一个class,会发现它的头文件中有#ifndef(....)的字样,就是起这个作用的。
    extern是不一样的,它表明在link时,不同的obj代码文件可以共享一个变量。
    但是同一个.h文件可以在不同的.cpp文件中都被包含。
      

  6.   

    #ifndef '标示符'
    #define '标示符'    声明内容#endif
    我觉得用这种方式比较好
    思路是:如果没有定义过该标示符,说明头文件没有被使用过
    反之表示该头文件已经被使用过,因此不再进行重复声明
      

  7.   

    to oldworm(oldworm) :
        #pragma once这句的作用是什么?我不是很明白,能给我解释一下吗?
      

  8.   

    OK,现在差不多快明白了~!
    比如说我写个头文件,叫point.h
    那么我就应该在point.h的开头写:
    #ifndef point.h
    #define point.h
    #enddef
    对吗?
      

  9.   

    #pragma once
    如果在vc中最好别用这个,.net支持的很好。#ifndef point.h
    #define point.h
    #enddef
    这样写好
    #ifndef __POINT_H__
    #define __POINT_H__
    #endif
    或者
    #ifndef __POINT_H__
    #define __POINT_H__  fjkfdjklfdsalkjfdslkjfdsalkjfdsalk
    #endif
    或者
    #if!defined __POINT_H__
    #define __POINT_H__
    #endif
    或者
    #if!defined __POINT_H__
    #define __POINT_H__ fjlfdsajlkfdsalkj;fdsalkj
    #endif
      

  10.   

    to cicala(知了)
    MSDN里面是这么说的
    #pragma onceSpecifies that the file, in which the pragma resides, will be included (opened) only once by the compiler in a build. A common use for this pragma is the following://header.h
    #pragma once
    // Your C or C++ code would follow:
      

  11.   

    #ifndef __OLDWORM_DEFINE_ABC_H__
    #define __OLDWORM_DEFINE_ABC_H__
    #pragma once...#endif