看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《tyc5116 (累人啊....)》之銘言: : ※ 引述《tyc5116 (累人啊....)》之銘言: : 不好意思,這個問題我似乎找到了一點頭緒,不過還有一些觀念要了解一下 : 我弄了一個更簡單的例子 : #include <iostream> : #include "a.h" : using namespace std; : int aaa=5; ^^^^^^^^^^ 你寫在global區 : int main(){ : abc(); : return 0; : } : //a.cpp : #include "a.h" : #include <iostream> : using namespace std; : extern int aaa; 宣告aaa 定義寫在上面的main.cpp 這樣OK 可是妳宣告了aaa 如果你main.cpp把int aaa;寫在main裡面 你abc雖然看到了aaa這個宣告 他會去global區找 aaa 可是他看不到main裡面的aaa 就是我意思說的scope不同 根本看不到aaa阿@@ 把abc的aaa改成寫 int bbb=::aaa*5; 這樣比較明白嘛~ 如果把extern 拉到abc裡面變為 void abc() { extern int aaa; int bbb=::aaa*5; cout<<bbb; ^^^^^ 加了::就會出錯....你可以想一下為什麼(scope問題) main.cpp global區有寫int aaa=5; } : void abc(){ : int bbb=aaa*5; : cout<<bbb; : } : 若我將藍色部份移到main內宣告便會出錯,錯誤訊息和我原來所遇到的很像 : 我之前一直以為main內的變數生命週期是在程式結束後才消失 : (我不知道這樣形容對不對,再麻煩更會解釋的大大說一下) : 但目前看來似乎其生命週期只有在main()內(就是把main當一般的函數來看) : 我的觀念錯了嗎?? : (不好意思,好像是很簡單的問題,不過還是想了解一下) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.207.187