«неразрешенный внешний символ»; ошибка в Visual Studio 2013

Я пытаюсь использовать библиотека libnoise, которая представляет собой библиотеку c ++ для генерации перлин-шума в Visual Studio 2013. Учебное пособие 3 ссылается на служебную утилиту noiseutils, состоящую из .cpp и .h, которую я размещаю здесь:

введите описание изображения здесь

У меня есть настройки проекта, направленные к папке include (содержимое которой показано на рисунке ниже), и мой код выглядит следующим образом.

#include "stdafx.h"#include <noise/noise.h>
#include "noiseutils.h"

int _tmain(int argc, _TCHAR* argv[])
{
noise::module::Perlin myModule;

utils::NoiseMap heightMap;
utils::NoiseMapBuilderPlane heightMapBuilder;
heightMapBuilder.SetSourceModule(myModule);
heightMapBuilder.SetDestNoiseMap(heightMap);
heightMapBuilder.SetDestSize(256, 256);
heightMapBuilder.SetBounds(2.0, 6.0, 1.0, 5.0);
heightMapBuilder.Build();

utils::RendererImage renderer;
utils::Image image;
renderer.SetSourceNoiseMap(heightMap);
renderer.SetDestImage(image);
renderer.Render();

utils::WriterBMP writer;
writer.SetSourceImage(image);
writer.SetDestFilename("tutorial.bmp");
writer.WriteDestFile();

return 0;
}

Весь этот код приведен в третьем учебнике, размещенном на их сайте. Visual Studio не имеет претензий к тому, что не может найти ни один из классов или функций, указанных во всем этом коде. Тем не менее, когда я пытаюсь построить проект …

1>------ Build started: Project: libnoisetest, Configuration: Debug Win32 --    ----
1>  libnoisetest.cpp
1>b:\visual studio\extra libraries\libnoise\include\noiseutils.h(1217):  warning C4244: 'initializing' : conversion from 'const double' to 'float',    possible loss of data
1>libnoisetest.obj : error LNK2019: unresolved external symbol "public: __thiscall noise::utils::GradientColor::~GradientColor(void)" (??1GradientColor@utils@noise@@QAE@XZ) referenced in function "public: __thiscall noise::utils::RendererImage::~RendererImage(void)" (??1RendererImage@utils@noise@@QAE@XZ)
1>libnoisetest.obj : error LNK2019: unresolved external symbol "public: __thiscall noise::utils::NoiseMap::NoiseMap(void)" (??0NoiseMap@utils@noise@@QAE@XZ) referenced in function _wmain
1>libnoisetest.obj : error LNK2019: unresolved external symbol "public: __thiscall noise::utils::NoiseMap::~NoiseMap(void)" (??1NoiseMap@utils@noise@@QAE@XZ) referenced in function _wmain
1>libnoisetest.obj : error LNK2019: unresolved external symbol "public: __thiscall noise::utils::Image::Image(void)" (??0Image@utils@noise@@QAE@XZ) referenced in function _wmain
1>libnoisetest.obj : error LNK2019: unresolved external symbol "public: __thiscall noise::utils::Image::~Image(void)" (??1Image@utils@noise@@QAE@XZ) referenced in function _wmain
1>libnoisetest.obj : error LNK2019: unresolved external symbol "public: void __thiscall noise::utils::WriterBMP::WriteDestFile(void)" (?WriteDestFile@WriterBMP@utils@noise@@QAEXXZ) referenced in function _wmain
1>libnoisetest.obj : error LNK2019: unresolved external symbol "public: __thiscall noise::utils::NoiseMapBuilderPlane::NoiseMapBuilderPlane(void)" (??0NoiseMapBuilderPlane@utils@noise@@QAE@XZ) referenced in function _wmain
1>libnoisetest.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall noise::utils::NoiseMapBuilderPlane::Build(void)" (?Build@NoiseMapBuilderPlane@utils@noise@@UAEXXZ) referenced in function _wmain
1>libnoisetest.obj : error LNK2019: unresolved external symbol "public:  __thiscall noise::utils::RendererImage::RendererImage(void)" (??0RendererImage@utils@noise@@QAE@XZ) referenced in function _wmain
1>libnoisetest.obj : error LNK2019: unresolved external symbol "public: void __thiscall noise::utils::RendererImage::Render(void)" (?Render@RendererImage@utils@noise@@QAEXXZ) referenced in function _wmain
1>B:\Visual Studio\_Projects\libnoisetest\Debug\libnoisetest.exe : fatal error LNK1120: 10 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Короче говоря, Visual Studio не может найти ничего из «noiseutils», пока оно на самом деле строится. Что я здесь не так делаю?

ОБНОВИТЬ:

После копирования noiseutils.cpp в мою исходную папку, как это было предложено Praetorian, я получаю этот набор предупреждений и одну ошибку:

1>------ Build started: Project: libnoisetest, Configuration: Debug Win32 ------
1>  noiseutils.cpp
1>b:\visual studio\extra libraries\libnoise\include\noiseutils.cpp(24): warning C4627: '#include <fstream>': skipped when looking for precompiled header use
1>          Add directive to 'stdafx.h' or rebuild precompiled header
1>b:\visual studio\extra libraries\libnoise\include\noiseutils.cpp(26): warning C4627: '#include <noise/interp.h>': skipped when looking for precompiled header use
1>          Add directive to 'stdafx.h' or rebuild precompiled header
1>b:\visual studio\extra libraries\libnoise\include\noiseutils.cpp(27): warning C4627: '#include <noise/mathconsts.h>': skipped when looking for precompiled header use
1>          Add directive to 'stdafx.h' or rebuild precompiled header
1>b:\visual studio\extra libraries\libnoise\include\noiseutils.cpp(29): warning C4627: '#include "noiseutils.h"': skipped when looking for precompiled header use
1>          Add directive to 'stdafx.h' or rebuild precompiled header
1>b:\visual studio\extra libraries\libnoise\include\noiseutils.cpp(1303): fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Я посмотрел на эту проблему и обнаружил, что могу просто отключить использование скомпилированных заголовков для noiseutils.cpp, так как ему не нужен доступ к stdafx. С этим проблема решена.

Однако из любопытства, что такое stdafx и какую роль он играет в проекте Visual Studio? Нужно ли мне отключать предварительно скомпилированные заголовки для любого исходного кода, который я добавляю в свой проект, чтобы он игнорировал stdafx?

1

Решение

Щелкните правой кнопкой мыши -> Свойства -> C ++ -> Дополнительные каталоги включения и добавьте расположение ваших заголовков.

Щелкните правой кнопкой мыши -> Добавить -> Существующий элемент -> Добавить файлы

Если ты хочешь
Щелкните правой кнопкой мыши -> Добавить -> Новый фильтр и вы поместите туда файлы

1

Другие решения


По вопросам рекламы [email protected]