<Профессиональный C++> 5-й, на основе главы 12-2-3, я пишу массив главы 15-2, но сообщаю об ошибке LNK2019C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 <Профессиональный C++> 5-й, на основе главы 12-2-3, я пишу массив главы 15-2, но сообщаю об ошибке LNK2019

Сообщение Anonymous »

Я настроил здесь класс шаблона и хотел поместить определение и реализацию метода в разные файлы. Я последовал предыдущему моделированию и записал его. Почему эта ошибка продолжала сообщать об отсутствии экземпляров? Я проверил и написал следующую симуляцию, которая должна работать нормально, но она продолжала сообщать об ошибках. Пожалуйста, попросите влиятельных лиц помочь выяснить, в чем проблема.
  • создайте day15.cpp

Код: Выделить всё

import mytestarray; // module name

#include ;
using namespace std;

int main()
{
MyArray my;
system("pause");
}
  • создайте файл модуля MyArrayTest.cppm

Код: Выделить всё

export module mytestarray;

export import :defv;
export import :impv;
  • создайте файл MyArrayDefinition.cppm

Код: Выделить всё

module;
#include

export module mytestarray:defv;
import ;
import ;
import ;
import ;
import ;
export template
class MyArray
{
public:
MyArray();
virtual ~MyArray();

MyArray& operator=(const MyArray& myarray) = delete;
MyArray(const MyArray& myarray) = delete;

MyArray(MyArray&& src) noexcept;
MyArray& operator=(MyArray&& rhs) noexcept;

T& operator[](size_t x);
const T& operator[](size_t x) const;

const T& getElementAt(size_t x) const;

void setElementAt(size_t x, const T& value);

size_t getSize() const noexcept;
private:
static const size_t AllocSize{ 4 };
void resize(size_t newSize);
T* m_elements{ nullptr };
size_t m_size{ 0 };
};
  • создать файл MyArrayDefinition.cppm

Код: Выделить всё

module;
#include 
export module mytestarray:impv;

import :defv;
export template
MyArray::MyArray()
{
m_size = AllocSize;
m_elements = new T[m_size]{};
}

export template
MyArray::~MyArray()
{
delete[] m_elements;
m_elements = nullptr;
}

export template
MyArray::MyArray(MyArray&& src) noexcept
: m_elements {std::exchange(src.m_elements, nullptr)}
, m_size {std::exchange(src.m_size, 0)} {}

export template
MyArray& MyArray::operator=(MyArray&& rhs) noexcept
{
if (this == &rhs)
{
return *this;
}

delete[] m_elements;
m_elements = std::exchange(rhs.m_elements, nullptr);
m_size = std::exchange(rhs.m_size, 0);
return *this;
}

export template
void MyArray::resize(size_t newSize)
{
auto newArray{ std::make_unique(newSize) };
for (size_t i = 0; i < m_size; i++)
{
newArray[i] = m_elements[i];
}

delete[] m_elements;
m_size = newSize;
m_elements = newArray.release();
}

export template
void MyArray::setElementAt(size_t x, const T& val)
{
if (x >= m_size)
{
resize(x + AllocSize);
}

m_elements[x] = val;
}

export template
T& MyArray::operator[](size_t x)
{
// TODO: 在此处插入 return 语句
//std::cout day15.obj : error LNK2019:  "public: virtual __thiscall MyArray::~MyArray(void)" (??1?$MyArray@H@@UAE@XZ::),函数 _main 中引用了该符号
1>D:\Project\CPlus\two\thir\CPlus\learnCPlus20\Debug\learnCPlus20.exe : fatal error LNK1120:
В чем проблема, я сослался на следующее
https://github.com/carlesmartin85/procp ... Partition/ GridDefinition.cppm

Подробнее здесь: https://stackoverflow.com/questions/783 ... rray-but-r
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»