LNK2019 ссылка на неразрешенный внешний символ Visual Studio 2017
Уважаемые коллеги, есть у меня основной файл
test.cpp:
#include "pch.h"
#include
#include "String.h" // Здесь определяется мой класс строки
int main()
{
double d = 12.536;
double r = common::round(d);
return 0x0000;
}
Файл - это мой собственный заголовочный файл:
#pragma once
#ifndef COMMON_h
#define COMMON_h
namespace common
{
double round(double val, unsigned precision = 0);
}
#endif
Этот файл лежит где-то на диске D:\, и в компиляторе я в свойствах проектах добавил директорию поиска включаемых файлов. Он его прекрасно находит, но при сборке приложения выдаёт ошибку LNK2019.
Рядом с этим файлом в той же директории лежит :
#pragma once
#include
double common::round(double val, int precision)
{
/// Тут какой-то код
return 0.0;
}
Если я помещаю реализацию метода round() внутрь файла, то всё работает нормально, но только если я единожды подключаю этот файл. А вот если я его включу и в основной cpp и в "String.h", то уже выкидывает ошибку LNK2005. Подскажите, пожалуйста, как мне решить эту проблему. Заранее спасибо :)
Простите, почему-то форма не пропускает угловые скобки. Далее я их заменю на фигурные.
По строчкам:
4 - #include {common.h}
13 - Файл {common.h} ...
25 - .лежит {common.cpp}
27 - #include {common.h}
35 - .внутрь файла {common.h}
Содержимое заголовочного файла полностью включается в тот файл, в котором написано #include. Поэтому если в заголовочном файле есть реализация функции, она может попасть в несколько cpp-файлов. Это приводит к ошибке.
Реализацию функции можно оформить как inline, тогда наоборот: она обязана быть в заголовочном файле.
Или надо поместить реализацию функции в cpp файл. Обычно так и делают.