Метод assing класа List объявлен в файле list.h
void assign(size_t, const value_type&);
При оперделении метод в файле list.cpp использую ключевое слово inline
inline void List::assign(size_t count, const value_type& val) {
this->List::clear();
this->List::List(count, val);
}
При вызове в main() даного метода получаю ошибку
Error LNK2019 unresolved external symbol "public: void __cdecl List::assign(unsigned __int64,int const &)" (?assign@List@@QEAAX_KAEBH@Z) referenced in function main list C:\Users\Admin\Documents\Visual Studio 2017\Projects\list\list\Source.obj 1
Вызов:
#include <iostream>
#include <string>
#include "List.h"
#define typeof(a)cout<<typeid(a).name()<<endl;
using namespace std;
int main() {
List ls(10,9);
ls.assign(8, 8);
cin.get();
}
Зачем Вы использует inline
в файле реализации? Это неправильно, inline
как раз нужен для того, чтобы размещать реализацию (определение) в заголовках. Размещать inline
сущности в файлах реализации не имеет смысла в общем случае, да ещё и неверно в частных (включая Ваш). Уберите inline
и всё у Вас заработает, либо перенесите реализацию в заголовок.
Релевантная цитата из стандарта (C++17:[basic.def.odr]p4):
An inline function or variable shall be defined in every translation unit in which it is odr-used outside of a discarded statement
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Есть игрок в виде шара и есть множество треугольниковУ каждого треугольника есть 3 точки
В c++ перенос строки осуществляется через \n но он так-же переносит каретку в исходное состояние, пример:
В С++11 появился новый синтаксис инициализацииВот что по этому поводу пишет Скотт Майерс в книге Effective Modern C++: