LNK2019 inline функция

216
25 января 2018, 19:36

Метод 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();
}
Answer 1

Зачем Вы использует 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

READ ALSO
Как изменить размер консольного окна?

Как изменить размер консольного окна?

Как изменить размер консольного окна?

388
Пересечение треугольника и шара. С++

Пересечение треугольника и шара. С++

Есть игрок в виде шара и есть множество треугольниковУ каждого треугольника есть 3 точки

276
Как перенести на новую строку не возвращая каретку?

Как перенести на новую строку не возвращая каретку?

В c++ перенос строки осуществляется через \n но он так-же переносит каретку в исходное состояние, пример:

227
Uniform initialization

Uniform initialization

В С++11 появился новый синтаксис инициализацииВот что по этому поводу пишет Скотт Майерс в книге Effective Modern C++:

228