解決already defined in .obj 的問題(定義/聲明的區別)


首先需要搞清楚什么是定義(definition ),什么是聲明(declaration)。

一、函數

函數的聲明:

int myfunc(int a,int b);

 

定義:

int myfunc(int a,int b){

  return a+b;

}

 

.h中雖然可以聲明然后定義函數,但是這樣這.h就只能被#include一次,否則就會出現重定義錯誤:

Error LNK2005 _myfunc already defined in xxx.obj 

所以盡量不要再.h中定義函數

二、變量

變量的聲明:

extern int a;

 

如果聲明包含初始化表達式,就被當作定義,即使前面加了extern。只有當extern聲明位於函數外部時,才可以被初始化。所以extern聲明時不要初始化

定義:

int a;//a是一個整型外部變量

 

外部變量定義和外部變量聲明的含義是不同的。外部變量的定義只能有一次,它的位置在所有函數之外,而同一文件中的外部變量的聲明可以有多次,它的位置可以在函數之內,也可以在函數之外。

 

以下是良好的程序設計風格和慣例:

頭文件(.h)中進行函數聲明,源文件(.c)中進行函數的定義;

變量的聲明統一放到頭文件;

 

 

參考:http://www.cnblogs.com/magicsoar/p/3702365.html

http://c.biancheng.net/cpp/biancheng/view/143.html

http://my.oschina.net/xinxingegeya/blog/232758


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM