Нет сопоставления функции для вызоваC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Нет сопоставления функции для вызова

Сообщение Anonymous »

Строительный код ниже с G ++ 10 сбой с ошибкой: < /p>
ui/file_grid.cpp: In member function 'const wxSize& {anonymous}::GridDataBase::getTextExtentBuffered(wxDC&, const wstring_view&)':
ui/file_grid.cpp:362:43: error: no matching function for call to 'std::unordered_map::find(const wstring_view&)'
362 | auto it = compExtentsBuf.find(text);
| ^
compilation terminated due to -Wfatal-errors.
< /code>
code: < /p>
struct SharedComponents //...between left, center, and right grids
{
...
std::unordered_map compExtentsBuf_; //buffer expensive wxDC::GetTextExtent() calls!
}

const wxSize& getTextExtentBuffered(wxDC& dc, const std::wstring_view& text)
{
auto& compExtentsBuf = sharedComp_.ref().compExtentsBuf_;
//- only used for parent path names and file names on view => should not grow "too big"
//- cleaned up during GridDataBase::setData()
assert(!contains(text, L'\n'));

auto it = compExtentsBuf.find(text);
if (it == compExtentsBuf.end())
it = compExtentsBuf.emplace(text, dc.GetTextExtent(copyStringTo(text))).first;
//GetTextExtent() returns (0, 0) for empty string!
return it->second;
}
< /code>
Stringhash & Stringequal < /p>
template Num hashString(const S& str);

template inline
Num hashString(const S& str)
{
using CharType = GetCharTypeT;
const auto* const strFirst = strBegin(str);

FNV1aHash hash;
std::for_each(strFirst, strFirst + strLength(str), [&hash](CharType c) { hash.add(c); });
return hash.get();
}

template bool equalString (const S& lhs, const T& rhs);

template inline
bool equalString(const S& lhs, const T& rhs)
{
const size_t lhsLen = strLength(lhs);
return lhsLen == strLength(rhs) && impl::equalSubstring(strBegin(lhs), strBegin(rhs), lhsLen);
}

struct StringHash
{
using is_transparent = int; //enable heterogenous lookup!

template
size_t operator()(const String& str) const { return hashString(str); }
};

struct StringEqual
{
using is_transparent = int; //enable heterogenous lookup!

template
bool operator()(const String1& lhs, const String2& rhs) const { return equalString(lhs, rhs); }
};


, в то время как это хорошо накапливается с G ++-12, он не работает на g ++-10. g ++ жаловался бы.
В указанной странице упоминается необходимость либо C ++-11, либо C ++-20, что, кстати, уже включена в команде компиляции.
Есть ли простой способ сделать эту сборку? Я не знаю C ++, и я пытаюсь сделать эту сборку с G ++-10, чтобы вернуть программное обеспечение. Я попробовал wstring вместо wstring_view , но затем он не удается где -то еще. Если это слишком сложно, я бы предпочел прервать задачу, но справка ценится. < /P>
Команда сборки: < /p>
g++-10 -Wdate-time -D_FORTIFY_SOURCE=2 -DAPP_NAME_SUFFIX='L" for Ubuntu"' -g -O2 -fdebug-prefix-map=/mnt/packages/git_repos/dpkg/freefilesync=. -fstack-protector-strong -Wformat -Werror=format-security -g -std=gnu++20 -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wnon-virtual-dtor -Wno-unused-function -Wshadow -Wno-maybe-uninitialized -DNDEBUG `wx-config --version=3.0 --cxxflags --debug=no` -pthread `pkg-config --cflags openssl` `pkg-config --cflags libcurl` `pkg-config --cflags libssh2` `pkg-config --cflags gtk+-3.0` -isystem/usr/include/gtk-3.0 `pkg-config --cflags libselinux` -DHAVE_SELINUX `pkg-config --cflags zlib` -c ui/file_grid.cpp -o /tmp/FreeFileSync_Make/ffs/src/ui/file_grid.cpp.o
< /code>
g ++ версия: < /p>
g++-10 (Ubuntu 10.5.0-1ubuntu1~20.04) 10.5.0


Подробнее здесь: https://stackoverflow.com/questions/794 ... wstring-vi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»