2011-08-30 157 views
0

我在C#中聲明如下界面時未定義:基類包括.cpp文件頭文件

public interface ArtistInterface 
{ 
    bool Flag { get; set; } 

    string Artist { get; set; } 

    int App { get; set; } 
} 

而且我想在C++/CLI來實現的:

implementation.h

public ref class Artist: public ArtistInterface 
{ 
    Artist(String^ name); 
    Artist(String^ name, int number); 

    bool flag; 
    String^ name; 
    int appearance; 

    property bool Flag 
    { 
     virtual bool get() sealed 
     { 
      return flag; 
     } 

     void set(bool value) 
     { 
      if (flag != value) 
      { 
       flag = value; 
      } 
     } 
    } 

    property String^ Name 
    { 
     virtual String^ get() sealed 
     { 
      return name; 
     } 

     void set(String^ value) 
     { 
      if (name != value) 
      { 
       name = value; 
      } 
     } 
    } 

    property int App 
    { 
     virtual int get() sealed 
     { 
      return appearance; 
     } 

     void set(int value) 
     { 
      if (appearance != value) 
      { 
       appearance = value; 
      } 
     } 
    } 
} 

現在一切正常,但如果我添加一個.cpp文件來實現2個構造函數,在包含「implementation.h」之後,我得到以下錯誤:

Artist : base class undefined

任何想法我得到這個?我錯過了一些東西,我對這個C++/CLI完全陌生。

回答

2

您的C++/CLI項目需要引用您的C#項目或從C#項目構建的DLL。直到您在C++/CLI項目中編譯了某些內容(即.cpp文件)後,纔會看到此錯誤。

在Visual Studio中,右鍵單擊C++/CLI項目並選擇References。點擊Add New Reference...按鈕。選擇C#項目(如果在同一解決方案中)或C#dll(如果不在同一解決方案中)。看看錯誤是否消失。此外,您的原始代碼具有帶虛擬get()但非虛擬set()的屬性。兩者必須是相同的。聽起來像你想讓你的set()也是虛擬的。

+0

是的,我有.cpp文件,我的頭文件還包括聲明接口的.dll文件。 – Kobe

+0

更準確地說出你需要檢查什麼的答案。 –

+0

看起來問題在於我需要聲明set()函數爲虛擬的,因爲我在界面中聲明瞭set,​​plz也將它添加到您的答案中,所以我可以接受它。 – Kobe