c++ Github操作构建错误,不允许现有构造函数

yxyvkwin  于 2022-12-20  发布在  Git
关注(0)|答案(1)|浏览(150)

我正在做一个Taglib C++库的实现。这个库有一个叫做"Filename"的类,当从用户文件系统打开文件时使用。在源文件头文件中它说它支持

  • 常量wchar_t *
  • 常量字符 *
  • 常量文件名&

当我使用w_char_t文件编码字符串构建. dll时,这个方法非常好用,确切地说是使用. unicode_str()或Taglib::String::toCWString()函数从Godot::String转换而来的。当我想使用Github操作构建lib文件时,问题出现了,它失败了,说:

error: no matching function for call to ‘TagLib::Vorbis::File::File(const wchar_t*)’
  772 |             TagLib::Ogg::Vorbis::File OggFile(path.toCWString());

但是当我查看源文件时,它清楚地表明它支持这种编码:

class TAGLIB_EXPORT FileName
  {
  public:
    FileName(const wchar_t *name);
    FileName(const char *name);

    FileName(const FileName &name);

    operator const wchar_t *() const;
    operator const char *() const;

    const std::wstring &wstr() const;
    const std::string  &str() const;

    String toString() const;

  private:
    const std::string  m_name;
    const std::wstring m_wname;
  };
#else
  typedef const char *FileName;
#endif

为什么这个构造函数在这里不受支持,而在我的机器上却不受支持?这和编译器有关系吗?库的版本在我的机器上和Github Action中是完全相同的,所以构造函数也应该存在于那里。
编辑:Taglib::Vorbis::File的构造函数,以及Taglib中的任何其他文件,在其构造函数中接受Filename作为文件路径。
以下是Taglib::Vorbis::File的定义示例:

class TAGLIB_EXPORT File : public Ogg::File
    {
    public:
      /*!
       * Constructs a Vorbis file from \a file.  If \a readProperties is true the
       * file's audio properties will also be read.
       *
       * \note In the current implementation, \a propertiesStyle is ignored.
       */
      File(FileName file, bool readProperties = true,
           Properties::ReadStyle propertiesStyle = Properties::Average);

我希望我的Taglib集成支持文件名中的所有Unicode字符,但由于这个错误,我只能构建一个发布版本,其中文件名被限制为ASCII字符。

vom3gejh

vom3gejh1#

您发布的FileName定义的代码片段遗漏了它上面的行:#ifdef _WIN32tiostream.h)。但是您包含了#else,它使FileName成为const char*的类型定义。
如果你在Windows上编译你的代码,FileName将是一个可以从const wchar_t*const char*构造的类。如果你不这样做,FileName只是一个const char*。后者必须是运行的Github操作的情况,这就是为什么你会得到错误。
为了同时支持这两个平台,这里只能使用const char*

相关问题