需要建议以尝试构建此应用(遇到2个错误)

时间:2020-09-26 05:04:16

标签: c++ android-studio android-studio-3.0 android-studio-2.3

在我自己学习C ++编码的同时,我试图将Dolphin模拟器中的功能实现为非官方版本。现在,我能够减少一个文件的错误数量,但是这些都是我为此得到的错误。

第一个代码错误是出于以下原因:

const u64 bytes_per_chunk = std::min(out_data_per_chunk, VolumeWii::GROUP_DATA_SIZE);
      const u64 total_size = blocks_in_this_group * VolumeWii::BLOCK_DATA_SIZE;
      const u64 data_offset = parameters.data_offset + write_offset_of_group;

当我引用““时,出现一个错误,指出(C:\ Users \ Desktop \ dolphin \ Source \ Core \ DiscIO \ WIABlob.cpp:1465:39:错误:没有匹配的函数来调用“ min” std :: min“它也出现在这里:

const u64 bytes_to_write = std::min(bytes_to_write_total, VolumeWii::GROUP_DATA_SIZE);

错误=(C:\ Users \ Desktop \ dolphin \ Source \ Core \ DiscIO \ WIABlob.cpp:1488:42:错误:没有匹配的函数调用'min')

-------------------------------------------- ----------------------------------

我遇到的下一个错误(同样,所有错误都在同一.cpp文件中)也来自相同的代码行:

const u64 bytes_per_chunk = std::min(out_data_per_chunk, VolumeWii::GROUP_DATA_SIZE);
      const u64 total_size = blocks_in_this_group * VolumeWii::BLOCK_DATA_SIZE;
      const u64 data_offset = parameters.data_offset + write_offset_of_group;

在这里:

const u64 bytes_to_write = std::min(bytes_to_write_total, VolumeWii::GROUP_DATA_SIZE);

我在以后的设置中遇到的错误是[C:\ Users \ Desktop \ dolphin \ Source \ Core \ DiscIO \ WIABlob.cpp:1465:21:错误:const类型'const u64'的对象的默认初始化(又名“ const unsigned long”常量)]->这与Android Studio中的“ bytes_to_write”行相关/突出显示。 还显示在下方,但仍与另一“ bytes_to_write”行有关[C:\ Users \ Desktop \ dolphin \ Source \ Core \ DiscIO \ WIABlob.cpp:1488:25:错误:const类型为'const u64'的对象的默认初始化(又名“ const unsigned long”常量)]

到目前为止,这是导致我无法构建应用程序的两个错误。

============================================= ========

构建错误:

In file included from ../../../../../../Core/DiscIO/WIABlob.cpp:5:
In file included from ../../../../../../Core\DiscIO/WIABlob.h:21:
In file included from ../../../../../../Core\DiscIO/WiiEncryptionCache.h:12:
../../../../../../Core\DiscIO/VolumeWii.h:91:3: warning: 'DiscIO::VolumeWii::CheckBlockIntegrity' hides overloaded virtual function [-Woverloaded-virtual]
  CheckBlockIntegrity(u64 block_index, const Partition &partition, const Partition partition1) const ;
  ^
../../../../../../Core\DiscIO/Volume.h:112:16: note: hidden overloaded virtual function 'DiscIO::Volume::CheckBlockIntegrity' declared here: different number of parameters (2 vs 3)
  virtual bool CheckBlockIntegrity(u64 block_index, const Partition& partition) const
               ^
In file included from ../../../../../../Core/DiscIO/WIABlob.cpp:5:
In file included from ../../../../../../Core\DiscIO/WIABlob.h:21:
In file included from ../../../../../../Core\DiscIO/WiiEncryptionCache.h:12:
../../../../../../Core\DiscIO/VolumeWii.h:141:10: warning: 'DiscIO::VolumeWii::CheckBlockIntegrity' hides overloaded virtual function [-Woverloaded-virtual]
    bool CheckBlockIntegrity(u64 block_index, const std::vector<u8> &encrypted_data,
         ^
../../../../../../Core\DiscIO/Volume.h:112:16: note: hidden overloaded virtual function 'DiscIO::Volume::CheckBlockIntegrity' declared here: different number of parameters (2 vs 3)
  virtual bool CheckBlockIntegrity(u64 block_index, const Partition& partition) const
               ^
../../../../../../Core/DiscIO/WIABlob.cpp:1465:39: error: no matching function for call to 'min'
          const u64 bytes_per_chunk = std::min(out_data_per_chunk, VolumeWii::GROUP_DATA_SIZE);
                                      ^~~~~~~~
C:/Android/SDK/ndk/21.3.6528147/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\algorithm:2532:1: note: candidate template ignored: deduced conflicting types for parameter '_Tp' ('unsigned long' vs. 'unsigned int')
min(const _Tp& __a, const _Tp& __b)
^
C:/Android/SDK/ndk/21.3.6528147/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\algorithm:2543:1: note: candidate template ignored: could not match 'initializer_list<type-parameter-0-0>' against 'unsigned long'
min(initializer_list<_Tp> __t, _Compare __comp)
^
C:/Android/SDK/ndk/21.3.6528147/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\algorithm:2523:1: note: candidate function template not viable: requires 3 arguments, but 2 were provided
min(const _Tp& __a, const _Tp& __b, _Compare __comp)
^
C:/Android/SDK/ndk/21.3.6528147/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\algorithm:2552:1: note: candidate function template not viable: requires single argument '__t', but 2 arguments were provided
min(initializer_list<_Tp> __t)
^
../../../../../../Core/DiscIO/WIABlob.cpp:1488:42: error: no matching function for call to 'min'
              const u64 bytes_to_write = std::min(bytes_to_write_total, VolumeWii::GROUP_DATA_SIZE);
                                         ^~~~~~~~
C:/Android/SDK/ndk/21.3.6528147/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\algorithm:2532:1: note: candidate template ignored: deduced conflicting types for parameter '_Tp' ('unsigned long' vs. 'unsigned int')
min(const _Tp& __a, const _Tp& __b)
^
C:/Android/SDK/ndk/21.3.6528147/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\algorithm:2543:1: note: candidate template ignored: could not match 'initializer_list<type-parameter-0-0>' against 'unsigned long'
min(initializer_list<_Tp> __t, _Compare __comp)
^
C:/Android/SDK/ndk/21.3.6528147/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\algorithm:2523:1: note: candidate function template not viable: requires 3 arguments, but 2 were provided
min(const _Tp& __a, const _Tp& __b, _Compare __comp)
^
C:/Android/SDK/ndk/21.3.6528147/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\algorithm:2552:1: note: candidate function template not viable: requires single argument '__t', but 2 arguments were provided
min(initializer_list<_Tp> __t)
^

如果您想在此.cpp文件中查看我正在使用的原始代码: https://github.com/JosJuice/dolphin/blob/660d81a10b4a8ff9a61631e69fb93e9010bccbc0/Source/Core/DiscIO/WIABlob.cpp

我希望我能得到所有好的建议来解决此问题,并最终构建了Apk(现在已经被困了几周了)

1 个答案:

答案 0 :(得分:1)

您的错误消息应该很清楚。相关部分:

../../../../../../Core/DiscIO/WIABlob.cpp:1465:39: error: no matching function for call to 'min'
          const u64 bytes_per_chunk = std::min(out_data_per_chunk, VolumeWii::GROUP_DATA_SIZE);
                                      ^~~~~~~~
C:/Android/SDK/ndk/21.3.6528147/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\algorithm:2532:1: note: candidate template ignored: deduced conflicting types for parameter '_Tp' ('unsigned long' vs. 'unsigned int')
min(const _Tp& __a, const _Tp& __b)

关键部分是您要向std::min传递不同的类型,这是不允许的(请考虑返回类型是什么)。您需要将其中一个参数转换为另一种类型,或者可以明确说明所需的std::min版本。

转换看起来像这样:

const u64 bytes_per_chunk = std::min(out_data_per_chunk, static_cast<unsigned long>(VolumeWii::GROUP_DATA_SIZE));

显式调用版本如下:

const u64 bytes_per_chunk = std::min<u64>(out_data_per_chunk, VolumeWii::GROUP_DATA_SIZE);