Я объявил следующий класс:неразрешенный внешний символ при использовании зЬй :: wstring
#pragma once
#include <stdio.h>
#include <vector>
#include <string>
namespace util
{
class FileReader
{
public:
FileReader();
~FileReader();
bool open(const std::wstring& name);
void close();
bool read(std::vector<char>& buf, __int64 startFrom, int size);
__int64 size() const;
private:
FILE* m_file;
std::wstring m_name;
__int64 m_size;
};
}
И его реализация:
#include "FileReader.hpp"
namespace util
{
bool FileReader::open(const std::wstring& name)
{
if (!name.empty() && (m_name != name))
{
close();
if (_wfopen_s(&m_file, name.c_str(), L"rb") == 0)
{
m_name = name;
// Get the file size
_fseeki64(m_file, 0, SEEK_END);
m_size = _ftelli64(m_file);
rewind(m_file);
}
else
{
m_file = NULL;
}
}
return (m_file != NULL);
}
// ....
}
в отдельной библиотеке и использовать его как это:
FileTransfer.cpp
#include <util/FileReader.hpp>
// .....
if (!m_fileReader.open(m_localFileName)) // std::wstring m_localFileName;
{
::MessageBoxA(NULL, "Failed to open file", "Error", MB_ICONERROR);
stopFileTransmission();
return;
}
в другом проекте. Оба проекта успешно скомпилируется, но FileTransfer.obj не удается ссылка:
Ошибка 2 Ошибка LNK2019: неразрешенный внешний символ «общественности: BOOL __thiscall Util :: FileReader :: открытый (класс станд :: basic_string, класс std :: allocator> const &) « (? open @ FileReader @ util @@ QAE_NABV? $ basic_string @ GU? $ char_traits @ G @ std @@ V? $ allocator @ G @ 2 @@ std @@@ Z) упоминаться в функции __catch $ onRequestDirClicked @ FileTransferWindow @@ AAEXXZ $ 0 C: \ Users \ х \ Documents \ DEV \ Server \ FileTransfer.obj сервер
Я помню, что он работал, когда я использовал std::string
, поэтому я предполагаю, что у него есть что-то с std::wstring
.
Любая идея в чем проблема?
Это не решит вашу проблему, но мой первый комментарий заключается в том, что вам следует избегать добавления директив 'include' в заголовки, если сами заголовки не используют символы. И даже тогда, предпочитают форвардную декларацию. – StoryTeller
Я предполагаю, что реализация также находится в пространстве имен 'util'? – StoryTeller
Да, реализация 'bool FileReader :: open' находится в пространстве имен' util' – user66875