今天测试了一下C++下重复定义会出现什么问题,使用gcc和vs2010做了测试,两者的测试结果一样
一共有5个文件,2个头文件,3个cpp文件。内容分别如下
//redefine0.h
#ifndef _REDEFINE0_H_
#define _REDEFINE0_H_
#include<iostream>
using namespace std;
//变量声明和定义
int i; //错误
int j=0; //错误
extern int k; //正确
extern int k=0;//错误
//函数声明和定义
void func() //错误
{}
void fun(); //正确
//类声明和定义
class Dog //正确
{
public:
void bark();
};
class Dog //编译通过,最终输出和main中inlude顺序有关,先定义为准
{
public:
void bark(){cout<<"wang"<<endl;}
};
#endif
//redefine0.cpp
#include "redefine0.h"
//redefine1.h
#ifndef _REDEFINE0_H_
#define _REDEFINE0_H_
#include<iostream>
using namespace std;
//变量声明和定义
int i; //错误
int j=0; //错误
extern int k; //通过
extern int k=0;//错误
//函数声明和定义
void func() //错误
{}
void fun(); //正确
//类声明和定义
class Dog //正确
{
public:
void bark()