Я использую библиотеку заголовков C ++ для загрузки stl-файлов, чтобы затем визуализировать их в примере сценария VR.По сути, я использую библиотеку parse_stl, которую я нашел GitHub.Библиотека включена в мой основной файл include
.Этот файл обрабатывает несколько структур, таких как: TriangleSet
(эта генерирует модели треугольников с их координатами и цветами) и Scene
(которая использует TriangleSet
и обрабатывает рендеринг).
Мне нужно вызватьфункция loadSTLModel
из функции void в структуре Scene
.loadSTLModel
- это void
в TriangleSet
, который позже вызывает stl::parse_stl
.Эта функция принимает имя файла как std::string
(по-видимому), но дает мне ссылки на ошибки, которые я не могу понять.Библиотека работает хорошо, я тестировал ее раньше, и мне удалось использовать ее в похожем примере, но это было более сложно, и я не смог правильно передать аргумент в этом примере.Мне ясно, что ошибка связана с тем, как я передаю переменную filepath различным функциям, но я не знаю, как это исправить.
Вот код ошибки:
main.obj: ошибка LNK2019: неразрешенный внешний символ "struct stl :: stl_data __cdecl stl :: parse_stl (класс std :: basic_string, класс std :: allocator> const &)" (? Parse_stl @ stl @@ YA? AUstl_data@ 1 @ ABV? $ Basic_string @ DU? $ Char_traits @ D @ std @@ V? $ Allocator @ D @ 2 @@ std @@@ Z) ссылка на функцию "public: void __thiscall TriangleSet :: loadSTLModel (char const *), без знака int, struct DirectX :: XMFLOAT3, struct DirectX :: XMFLOAT3) "(? loadSTLModel @ TriangleSet @@ QAEXPBDIUXMFLOAT3 @ DirectX @@ 1 @ Z) * 1019 *
main.h
struct TriangleSet{
...
void loadSTLModel(const char* filename, uint32_t color, XMFLOAT3 origin, XMFLOAT3 size) {
XMFLOAT3 s = multXMFLOAT(size, XMFLOAT3(0.5,0.5,0.5));
XMFLOAT3 o = origin;
std::string stl_filename = filename;
auto stlData = stl::parse_stl(stl_filename);
...
}
...
}
struct Scene{
...
void Init(){
...
TriangleSet furniture;
std::string FilePathName = "C:/sampleSTL.stl";
XMFLOAT3 Origen = { 0.0f, 0.0f, 0.0f };
XMFLOAT3 Escala = { 1.0f, 1.0f, 1.0f};
furniture.loadSTLModel(FilePathName.c_str(),0xff383838, Origen, Escala);
...
}
parse_stl.h
namespace stl {
struct stl_data {
std::string name;
std::vector<triangle> triangles;
stl_data(std::string namep) : name(namep) {}
};
stl_data parse_stl(const std::string& stl_path);
}
parse_stl.cpp
namespace stl {
...
stl_data parse_stl(const std::string& stl_path) {
std::ifstream stl_file(stl_path.c_str(), std::ios::in | std::ios::binary);
if (!stl_file) {
std::cout << "ERROR: COULD NOT READ FILE" << std::endl;
assert(false);
}
char header_info[80] = "";
char n_triangles[4];
stl_file.read(header_info, 80);
...
...
return info;
}
}