Я создаю новый абстрактный класс в C ++ / CLI и столкнулся со странной ошибкой. Есть много вопросов, похожих на этот, но ни один из ответов не может мне помочь.
В этом новом классе я получаю следующую ошибку:
error LNK2020: unresolved token (06000002) Foo::execute
Это h-файл:
#pragma once
using namespace System::IO::Ports;
using namespace System;
public ref class Foo
{
protected:
SerialPort^ port;
public:
Foo(SerialPort^ sp);
virtual array<Byte>^ execute();
};
Это cpp-файл:
#include "StdAfx.h"#include "Foo.h"
Foo::Foo(SerialPort^ sp)
{
this->port = sp;
}
Обратите внимание, что когда я закомментирую virtual array<Byte>^ execute();
линия, все компилируется отлично. Кроме того, когда я удаляю virtual
модификатор и добавить реализацию execute()
в cpp-файле это тоже работает.
Вы уже дали ответ сами:
Кроме того, когда я удаляю виртуальный модификатор и добавляю реализацию execute () в cpp-файл, он также работает.
Вы объявили метод execute
в шапке, но его реализация отсутствует. Это именно то, что говорит вам ошибка компоновщика.
В этом случае декларация как virtual
не имеет значения.
Если вы хотите создать абстрактный класс, вы можете найти более подробную информацию в многочисленных статьях онлайн (например, Викиучебники: Абстрактные Занятия)
Вы должны либо реализовать метод, либо удалить объявление из заголовка. (виртуальное ключевое слово в данном случае не имеет значения)
Пожалуйста, задайте вопрос, если есть.