2015-11-03 100 views
-3

我有一個結構,我想填寫一個單獨的源文件從我正在運行main。在頭文件中我包含了extern,但是當我去定義源文件中的變量時,它不起作用。Extern變量C++

//This is a header file 
    struct example { 
     int data1; 
     float data2; 
     bool example; 
    } 

    extern example tmp; 

,然後在源文件:

example *tmp = new example; 

我得到錯誤 「Expected unqualified-id」。這是爲什麼?

+0

你真的環顧四周嗎? http://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source-files-in-c在這裏回答它很好。另外我沒有明白:爲什麼你使用不同的數據類型?(ptr和var) – Lasoloz

+0

我真的環顧四周,已經看到了。然而,這並沒有幫助這個特定的例子。我正在使用ptr,因爲當我沒有收到錯誤消息:「沒有可行的從'example *'轉換爲'example'」。我在答覆的評論中也提到了這一點。 –

回答

1
  • 聲明結構後缺少分號。
  • extern聲明中的類型和定義不同:example vs example*
+0

對不起,逗號是一個錯字。我的代碼中有逗號。我刪除了星號,現在我的代碼顯示爲:「example tmp = new example;」然而,那會得到一個錯誤,內容如下:「沒有可行的從'example'到'example'的轉換」「 –

+1

這是因爲'new'返回一個指向分配內存的指針! – CinCout

+1

@phantazein假設評論,我必須問:你確切知道指針和內存分配如何工作?如果你不完全瞭解,請再試一次 - 這不是一種冒犯,我沒有在一天內學習,但我學會了。回到你的問題:如果你創建了extern指針,那麼它是extern指針而不是(簡單的)變量。因此,聲明「extern example tmp」,然後使用「example * tmp」是錯誤的,因爲第一個不是指針。因爲tmp不是指針,所以創建「extern example tmp」然後分配是錯誤的。這意味着你不需要使用新的關鍵字,或者你應該在.h中聲明指針。 – Lasoloz