我有一个控制台程序
有以下几个文件,其代码如下
a.h
#ifndef A_H
#define A_H
int Sub(void);int a=10;              //注意,声明了a就是这家伙,注释掉就没有问题
#endif  //A_Ha.cpp
#include "a.h"
int Sub(void)
{
return 0;
}b.h
#ifndef B_H
#define B_Hint Add(int);
#endif  //B_Hb.cpp
#include "iostream.h"
#include "a.h"
#include "b.h"
int Add(int A)
{
return 0;
}
void main(void)
{
int a=Sub();
}一编译就出现
b.obj : error LNK2005: "int  a" (?a@@3HA) already defined in a.obj
Debug/deletezsf.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.怎么改正呢?????

解决方案 »

  1.   

    这样不行的。
    在a.h中写:extern int a;
    在a.cpp中写:int a::a;这样就定义成全局变量了。
      

  2.   

    int a=10;              //注意,声明了a就是这家伙,注释掉就没有问题这个不是“声明”,是“定义”。根据C++标准的规定,
    一个变量是声明,
    必须同时满足两个条件,否则就是定义:
    (1)声明必须使用extern关键字
    (2)不能给变量赋初值
    所以,
    下面的是声明:
    extern int a;
    下面的是定义
    int a;
    int a = 0;
    extern int a =0;