Для исправления ошибки "неразрешенных внешних элементов" необходимо переместить реализацию шаблонных функций из файла Vector.cpp в файл Vector.h. Шаблонные функции должны быть определены непосредственно в заголовочном файле, чтобы компилятор мог использовать их при компиляции кода.
Ваш заголовочный файл Vector.h должен выглядеть следующим образом:
#pragma once #include "stdafx.h" #include <iostream> using namespace std; template <typename T> class Vector { private: int len; int maxLen; T *arr; public: Vector(); Vector(int maxLen); ~Vector(); void add(T item); void printArray(); void operator -= (T a); double &operator [] (int i); void input(int count); friend Vector operator - (Vector &vct, double a); }; template <typename T> Vector<T>::Vector() { this->arr = NULL; this->len = 0; this->maxLen = 0; } template <typename T> Vector<T>::Vector(int maxLen) { this->maxLen = maxLen; this->arr = new T[maxLen]; this->len = 0; } template <typename T> Vector<T>::~Vector() { } template <typename T> void Vector<T>::add(T item) { if (this->len >= this->maxLen) return; this->arr[this->len] = item; this->len++; } template <typename T> void Vector<T>::input(int count) { T a = 0; for (int i = 0; i < count; i++) { cout << "Input the number: "; cin >> a; this->add(a); } } template <typename T> void Vector<T>::printArray() { for (int i = 0; i < this->len; i++) { cout << i << ": " << this->arr[i] << endl; } } template <typename T> void Vector<T>::operator -= (T a) { for (int i = 0; i < this->len; i++) { this->arr[i] = this->arr[i] - a; } } template <typename T> double &Vector<T>::operator [] (int n) { return this->arr[n]; } template <typename T> Vector<T> operator - (Vector<T>& vct, double a) { Vector<T> res(vct.maxLen); res.len = vct.len; for (int i = 0; i < vct.len; i++) { res.arr[i] = vct.arr[i] - a; } return res; }
Затем в файле lab15.cpp нужно удалить подключение заголовочного файла Vector.cpp:
#include "Vector.cpp"
Эти изменения помогут избежать ошибки "неразрешенных внешних элементов". После внесения этих изменений перекомпилируйте проект.
Для исправления ошибки "неразрешенных внешних элементов" необходимо переместить реализацию шаблонных функций из файла Vector.cpp в файл Vector.h. Шаблонные функции должны быть определены непосредственно в заголовочном файле, чтобы компилятор мог использовать их при компиляции кода.
Ваш заголовочный файл Vector.h должен выглядеть следующим образом:
#pragma once#include "stdafx.h"
#include <iostream>
using namespace std;
template <typename T>
class Vector
{
private:
int len;
int maxLen;
T *arr;
public:
Vector();
Vector(int maxLen);
~Vector();
void add(T item);
void printArray();
void operator -= (T a);
double &operator [] (int i);
void input(int count);
friend Vector operator - (Vector &vct, double a);
};
template <typename T>
Vector<T>::Vector()
{
this->arr = NULL;
this->len = 0;
this->maxLen = 0;
}
template <typename T>
Vector<T>::Vector(int maxLen)
{
this->maxLen = maxLen;
this->arr = new T[maxLen];
this->len = 0;
}
template <typename T>
Vector<T>::~Vector()
{
}
template <typename T>
void Vector<T>::add(T item)
{
if (this->len >= this->maxLen) return;
this->arr[this->len] = item;
this->len++;
}
template <typename T>
void Vector<T>::input(int count)
{
T a = 0;
for (int i = 0; i < count; i++)
{
cout << "Input the number: ";
cin >> a;
this->add(a);
}
}
template <typename T>
void Vector<T>::printArray()
{
for (int i = 0; i < this->len; i++)
{
cout << i << ": " << this->arr[i] << endl;
}
}
template <typename T>
void Vector<T>::operator -= (T a)
{
for (int i = 0; i < this->len; i++)
{
this->arr[i] = this->arr[i] - a;
}
}
template <typename T>
double &Vector<T>::operator [] (int n)
{
return this->arr[n];
}
template <typename T>
Vector<T> operator - (Vector<T>& vct, double a)
{
Vector<T> res(vct.maxLen);
res.len = vct.len;
for (int i = 0; i < vct.len; i++)
{
res.arr[i] = vct.arr[i] - a;
}
return res;
}
Затем в файле lab15.cpp нужно удалить подключение заголовочного файла Vector.cpp:
#include "Vector.cpp"Эти изменения помогут избежать ошибки "неразрешенных внешних элементов". После внесения этих изменений перекомпилируйте проект.