2015-04-17 113 views
0

我得到錯誤代碼C2512,這是沒有適當的默認構造函數可用。然而,在我看來,一切都應該工作,所以我有點困惑如何讓這個編譯。如何在C++ cli中正確使用正向聲明的類?

這裏是頭文件代碼:

namespace MyNamespace 
{ 
    ref class ForwadDeclaredClass; 

    public ref class MyClass 
    { 
     public: 
     MyClass(); 
     // ... 
     private: 
     ForwadDeclaredClass^ fc; 
    } 
} 

現在,在我的cpp文件中,我定義的轉發類,並嘗試在構造函數MyClass的使用它。

using namespace MyNamespace; 
//... 

public ref class ForwardDeclaredClass 
{ 
    public: 
     ForwardDeclaredClass() 
     { 
     } 
} 

MyClass::MyClass() 
{ 
    // Compiler complains with error code here 
    fc = gcnew ForwardDeclaredClass(); 
} 

我知道我必須缺少一些簡單的東西,但我只是沒有看到它。任何幫助,將不勝感激。

回答

2

乍一看,它看起來像你的名字空間已關閉。

在頭文件中,您在MyNamespace內聲明ForwardDeclaredClassMyClass

在cpp文件,你使用MyNamespace,但你寫的代碼是不是的命名空間。

它看起來像你需要將cpp文件的大部分內容包含在namespace MyNamespace {塊中。

+1

不是*大部分代碼,而只是'ForwardDeclaredClass'的定義。前向聲明是針對'MyNamespace :: ForwardDeclaredClass'進行的,因爲'ref class ForwadDeclaredClass;'行在命名空間內,但定義是針對':: ForwardDeclaredClass'(它位於命名空間之外)。不需要在'namespace'塊中包含'MyClass :: MyClass()'定義 - '使用名稱空間MyNamespace'在那裏生效。 –