メインコンテンツ

Visual コンパイラに関連する Polyspace コンパイル エラーの修正

コンパイラが Visual® コンパイラに基づいている場合は、次のメッセージが表示されます。詳細は、コンパイラ (-compiler) を参照してください。

フォルダーのインポート

Visual アプリケーションで #import 命令を使用すると、Visual C++ コンパイラによって、いくつかの定義を含むヘッダー ファイルが拡張子 .tlh 付きで生成されます。Polyspace® 解析中のコンパイル エラーを回避するには、これらのファイルを含むフォルダーを指定しなければなりません。

元のコード:

#include "stdafx.h"
#include <comdef.h>
#import <MsXml.tlb>
MSXML::_xml_error e ;
MSXML::DOMDocument* doc ;
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

エラー メッセージ:

"../sources/ImportDir.cpp", line 7: catastrophic error: could not 
open source file "./MsXml.tlh"
    #import <MsXml.tlb>

Visual C++ コンパイラはこれらのファイルを "組み込みの" フォルダーに生成します (通常は Debug または Release)。これらのファイルを使用できるようにするには、次のようにします。

  • Visual C++ アプリケーションをビルドする。

  • Polyspace 解析用にビルド フォルダーを指定する。

プラグマ Pack

このコンパイル フラグ (#pragma pack) に異なる値を使用するとリンク エラー メッセージが表示される場合があります。

元のコード:

test1.cpptype.htest2.cpp
#pragma pack(4)

#include "type.h"
struct A
{
    char c ;
    int i ;
} ;
#pragma pack(2)

#include "type.h"

エラー メッセージ:

Pre-linking C++ sources ...
"../sources/type.h", line 2: error: declaration of class "A" had 
a different meaning during compilation of "test1.cpp" 
(class types do not match)
    struct A
           ^
           detected during compilation of secondary translation unit 
"test2.cpp"

解析を続行するには、オプション [pragma pack 指令を無視] (-ignore-pragma-pack) を使用します。

C++/CLI

Polyspace は、.NET プログラミング用の言語拡張のセットである Microsoft® C++/CLI をサポートしていません。

次のようなエラーが表示される場合があります。

error: name must be a namespace name 
|          using namespace System; 
または
error: expected a declaration 
|          public ref class Form1 : public System::Windows::Forms::Form