2015-04-17 108 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'在那里生效。 –