※ 引述《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