Нет подходящего конструктора по умолчанию? - PullRequest
1 голос
/ 15 декабря 2009

У меня странная ошибка при написании кода на 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 ]

3 голосов
/ 15 декабря 2009

Понял! Мне пришло в голову, что я бы заранее объявил класс RawDataPacket в заголовке класса Controller.

Я попытался включить туда заголовок и удалить предварительное объявление, и это сработало. Получается, что, несмотря на объявление класса вперед, я забыл включить заголовок в Controller.cpp

Это было бы неприятно, чтобы найти .. ура за помощь всем!

1 голос
/ 16 июня 2011

используйте явное перед конструктором, если у вас есть параметры для конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...