我宣布了以下课程:
>>> x = 42;pass;
>>> x
42
及其实施:
#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;
};
}
在一个单独的库中并像这样使用它:
FileTransfer.cpp
#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.obj无法链接:
错误2错误LNK2019:未解析的外部符号“public:bool __thiscall util :: FileReader :: open(class std :: basic_string,class std :: allocator&gt; const&amp;)“ (?打开@ @的FileReader UTIL @@ QAE_NABV?$ basic_string的@ GU?$ char_traits @ģ@ @@ STD V'$分配器@ģ@ @@ 2 STD @@@ Z) 在函数中引用 __catch $?onRequestDirClicked @ FileTransferWindow @@ AAEXXZ $ 0 C:\ Users \ x \ Documents \ dev \ Server \ FileTransfer.obj Server
我记得当我使用#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;
}
时它正常工作,所以我认为它与std::string
有一些共同点。
知道可能是什么问题吗?
答案 0 :(得分:0)
看来,问题是两个项目的设置值不同
将wchar_t视为内置类型
为两个项目将其设置为否(/ Zc:wchar_t - ),解决了链接器错误。我仍然不知道后果会是什么。
答案 1 :(得分:0)
尝试使用extern“ C”声明打开功能。