2014-01-17 28 views
-3

這是一些從Qt中獲取環境變量的代碼,但是,似乎Qt的QProcessEnvironment::systemEnvironment()僅在重新引導後反映了新的環境變量更改。所以我想使用getenv。 不過我"error C2220: warning treated as error - no 'object' file generated"從這個:C++ no'object'file generated

QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); 
const QString ENGINE_ROOT = env.value("ENGINE_ROOT", "") != "" ? 
env.value("ENGINE_ROOT","") : QString(getenv("ENGINE_ROOT")); 

不要告訴我,像禁用/ WX或更低W4到W3,我不想聽到這個,我想知道到底是什麼原因

不生成'object'文件

+2

那是什麼觸發了C2220錯誤你實際上得到了警告,?您的編譯器設置爲將警告視爲錯誤,並且錯誤會導致編譯器不生成輸出對象文件。爲了避免該錯誤,您需要修復警告。 –

+0

此外,您的原始問題「僅在重啓後反映新的環境變量更改」可能會通過簡單地重新打開命令提示符窗口(或打開一個新窗口)來解決。命令提示符窗口繼承的環境變量是在打開時有效的環境變量。 (或者,任何*進程繼承的環境變量,包括你的IDE) –

+0

我不是在說cmd.exe裏面這樣做,如果你重新打開另一個cmd.exe,那麼當然你會看到它反映了新的環境變量。我正在討論Qt中的檢索環境變量,它似乎無法在運行中反應出新的變化。 –

回答

3

我會解決潛在的問題,而不是編譯問題。

的任何進程的環境變量都是在您的新進程啓動時從其父進程的進程中複製的。從那一刻起,唯一可以修改它們的就是你自己的過程。

實際上,這意味着在Windows對話框中更改環境變量並不會爲任何現有進程更改這些值。這些更改將應用​​於explorer.exe進程,然後從資源管理器啓動任何新進程。

Windows應用程序有一種可能的方式來通知由Explorer創建的環境變量的更改。詳情請參閱How to modify the PATH variable definitely through the command line in Windows

7

「錯誤C2220:警告視爲錯誤 - 沒有 '對象' 文件生成」

錯誤已經回答了你的問題:生成

  1. 警告。
  2. 因爲您已經告訴編譯器將警告視爲錯誤,所以發生了錯誤
  3. 由於發生錯誤,編譯器沒有生成目標文件。

如果您想知道原始警告的含義,那麼您需要向我們詢問有關警告。

3

我剛剛有這個問題。混亂的真正根源是微軟的Visual Studio列出了
錯誤C2220:警告視爲錯誤 - 沒有「對象」文件生成
線分開警告 - 有時甚至以前警告 - 因此它並不立即顯示錯誤與列出的警告有關。

修復列出的所有警告以解決此問題。

+1

特別令人困惑的是,警告似乎是「沒有」對象「文件生成」,這似乎是OP陷入的陷阱。 – chrisvarnz

+0

在我的情況下,我有一堆其他警告,並且當我爲這些警告添加/ wd時,此警告消失。作爲一個旁註,我不認爲使用/ wd2220可以忽略C2220。編譯器(VS2010)會在命令行中產生一個警告,將其引用爲不正確的值「 – Soundararajan

0

嘗試改變變量名 例如:

double height; 

double Height; 

工作對我來說

相關問題