2010-02-26 29 views
0

我有一段時間可以在2008年編譯的程序。 注意我可以使用cl和Ultimate ++ IDE編譯程序。 這是一個相當大的程序,所以我不打算在這裏發佈。 我無法在Studio中進行編譯。在VS C++中導致「錯誤C2856:#pragma hdrstop不能在#if塊內」?

的錯誤是

1>c:\program files\microsoft visual studio 9.0\vc\include\xstring(1735) 
: error C2856: #pragma hdrstop cannot be inside an #if block 

這似乎是愚蠢的,因爲沒有hdrstop會在那裏。

預編譯頭文件已關閉。

這就是有:

  if (_Mysize < _Off) 
       _String_base::_Xran(); // _Off off end 
      if (_Mysize - _Off < _Count) 
       _Count = _Mysize - _Off; 
      _Traits_helper::copy_s<_Traits>(_Dest, _Dest_size, _Myptr() + _Off, _Count); 
      return (_Count); 
      } 

     void __CLR_OR_THIS_CALL swap(_Myt& _Right) 
      { // exchange contents with _Right <<<<<<<<----------this is the line 
      if (this == &_Right) 
       ; // same object, do nothing 
      else if (_Mybase::_Alval == _Right._Alval) 
       { // same allocator, swap control information 

感謝。

回答

3

瘋狂的猜測。

該項目的預編譯頭文件被關閉了嗎?它們是否關閉項目中的每個源文件(導致單個文件設置覆蓋整個項目設置)。

+0

是的,它沒有關閉一個文件,它是問題的一部分。 – Aftershock 2010-02-26 18:18:26

+0

另外,我嘗試了可能與其相關的X64代碼生成。 – Aftershock 2010-02-26 18:19:51

0

因爲Visual C++調用cl(它工作正常),你顯然已經弄亂了標題,我要檢查的第一件事是包含路徑。張貼在這裏。

+0

我檢查了它們,它們(工作室標題)與命令行版本中的標題有點不同。即使我讓他們一樣,問題仍然存在。 – Aftershock 2010-02-26 14:57:53

+0

我怎麼能搞砸導致一些奇怪的錯誤的標題? – Aftershock 2010-02-26 14:59:58

+0

什麼包括路徑?包含xstring.h或其他包含的包含列表? – Aftershock 2010-02-26 15:03:45

0

我遇到了完全相同的問題,也感到困惑,因爲我的代碼中沒有任何hdrstop pragmas。但是,我從一個腳本(而不是IDE)進行編譯,並且當我省略編譯器選項/ Yc(創建PCH)時,錯誤消失。

1

我發現了這一點。它是由預編譯頭文件引起的,但是沒有必要關閉它。

當頂層#include "headertobeprecompiled.h"位於#if#endif塊內時發生。如果可以將其移出,那麼錯誤消息將消失。