使用std :: wstring时未解析的外部符号

时间:2016-03-20 09:13:07

标签: c++ visual-studio linker-errors

我宣布了以下课程:

>>> 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有一些共同点。

知道可能是什么问题吗?

2 个答案:

答案 0 :(得分:0)

看来,问题是两个项目的设置值不同

  

将wchar_t视为内置类型

为两个项目将其设置为否(/ Zc:wchar_t - ),解决了链接器错误。我仍然不知道后果会是什么。

答案 1 :(得分:0)

尝试使用extern“ C”声明打开功能。