2011-07-14 10 views
3

C++/CLIで名前空間を持つマネージクラスを作成する際に問題が発生しています。C++/CLIでマネージクラスと名前空間を作成する際の問題

私は次の操作を実行したいと思います:

#pragma once 
#include "abc.h" 
#ifdef _MANAGED 
#using <system.dll> 
using namespace System; 
using namespace System::IO; 
using namespace System::Collections::Generic; 
using namespace System::Globalization; 
#endif 

namespace Animals 
    { 
    public ref class Pets 
     { 
     Pets::Pets(){} 
     }; 
    } 

私はカップルの異なる問題を抱えて:私は.cppファイルにこのコードを配置すると

A)を、それが正常にコンパイルされます。しかし、名前空間が期待どおりに動作していないように見えます(私が作成したこの質問を参照してください:Namespace not recognized in C++/CLI)唯一の答えは、クラスファイルの名前空間を宣言しなければならないということです。しかし、これは問題です。..

B)コンパイラは、ヘッダファイルに置かれたときに約public ref class Petsという文句を言います。構文エラーがあるはずです。

インテリセンスエラー:

expected a declaration

他のエラー:

'{' : missing function header (old-style formal list?)

syntax error: 'public'

私は両方を示してすべての偉大なC++/CLIの例を見つけるように見えることはできませんヘッダーとcppファイル。

私の質問は次のとおりです。マネージクラスとネームスペースの両方を期待どおりに動作させるにはどうすればよいですか? (何が間違っているのですか)

これ以上の情報を含める必要がある場合はお知らせください。あなたの時間と忍耐を事前に

感謝:)

+0

ヘッダーファイルも指定してください。前方宣言のみを含むことができます。 – marc

+0

@marc:私はちょうど上記のコードをヘッダーの内外に移動しました。 (あなたを示すために使用される追加のコードはありません)。 – developer

+0

あなたは正確なエラーは何ですか? – marc

答えて

3

ヘッダファイルでちょうど前方宣言があるはずです。

// abc.h 
#pragma once 

namespace Animals 
{ 
    public ref class Pets 
    { 
     Pets(); // forward declaration 
     // Pets::Pets is redundant and wrong, because you are inside 
     // the class Pets 
    }; 
} 


// abc.cpp 
#include "abc.h" 
#ifdef _MANAGED 
#using <system.dll> 
using namespace System; 
using namespace System::IO; 
using namespace System::Collections::Generic; 
using namespace System::Globalization; 
#endif 

namespace Animals 
{ 
    Pets::Pets() {} // implementation 
    // Now Pets::Pets() is right, because you dont write the class... wrapper again. 
} 
関連する問題