没有合适的默认构造函数?

时间:2009-12-15 14:36:46

标签: class constructor c++-cli

编写一些C ++ / CLI代码时出现了一个奇怪的错误。我正在尝试复制一个包含一些数据的类。

该类定义为:

public ref class RawDataPacket
{
protected:
    float* m_internalData;

public:
    RawDataPacket(const float* newInternalData);
    RawDataPacket(const RawDataPacket^ rdp);
    RawDataPacket(RawDataPacket^ rdp);
    RawDataPacket();
};

当我尝试按如下方式使用该课程时:

void SomeClass::SomeFunction( RawDataPacket^ rdp )
{
    // Send a copy of the packet to anyone interested.
    RawDataPacket^ rdp1 = gcnew RawDataPacket( rdp );
    ForwardData( rdp1 );
}

我明白了:

error C2512: 'RawDataPacket' : no appropriate default constructor available

我认为RawDataPacket();覆盖了那个? ..或者我错过了一些非常明显的东西吗?

[编辑] RawDataPacket()的正文如下所示:

RawDataPacket::RawDataPacket()
{
    m_internalData = nullptr;
}

[Edit2] 完整的编译器输出如下所示:

1>------ Build started: Project: MySoftware, Configuration: Debug Win32 ------
1>Compiling...
1>RawDataPacket.cpp
1>Controller.cpp
1>.\Controller.cpp(452) : error C2512: 'MySoftware::RawDataPacket' : no appropriate default constructor available
1>Build log was saved at "file://c:\Projects\Experiments\MySoftware\Debug\BuildLog.htm"
1>MySoftware - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========

2 个答案:

答案 0 :(得分:3)

知道了!在我看来,我已经在Controller类的头部中向前声明了RawDataPacket类。

我尝试在那里包含标题并删除前向声明并且它有效。所以事实证明,尽管向前声明了类,我忘了在Controller.cpp中包含标题

这可能是一个令人讨厌的人......为所有人提供帮助!

答案 1 :(得分:1)

如果你有构造函数的参数,

在构造函数之前使用explicit。