Seltsame Fehler beim Upgrade von Code von C++17 auf C++20 mit MSVC 2022 [geschlossen]C++

Programme in C++. Entwicklerforum
Anonymous
 Seltsame Fehler beim Upgrade von Code von C++17 auf C++20 mit MSVC 2022 [geschlossen]

Post by Anonymous »

Ich versuche, unsere Codebasis von C++17 auf C++20 zu aktualisieren. Wie erwartet gibt es ziemlich viele Fehler und Warnungen, aber einige davon kann ich nicht ganz verstehen.
Als Beispiel hier einige (Vorlagen-)Funktionen, die Fehler verursachen:

Code: Select all

template 
void delete_all(T& t)
{
for (T::const_iterator it = t.begin(); it != t.end(); ++it)
delete *it;
t.clear();
}

Code: Select all

template
inline T* get_from_TRRefList_by_index(const TRRefList& liste, unsigned int index)
{
assert(!(index >= liste.Count() || index < 0));
TRRefList::Iterator x(liste);

for (unsigned int i = 0; i < liste.Count(); ++i, ++x)
{
if (i == index)
return x.current();
}

return nullptr;
}
Für beide Funktionen erhalte ich die Fehler C3878, C2760, C2065 und C7510. Den C2065 kann ich im Kontext verstehen, die anderen jedoch nicht.
Verwendet die neueste Version von Visual Studio 22, derzeit 17.14.24.
Auf Anfrage die vollständigen Fehler:

Code: Select all

Severity    Code    Description Project File    Line    Suppression State   Details
Error   C3878   syntax error: unexpected token 'it' following 'expression'  DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C2760   syntax error: ')' was unexpected here; expected ';' DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C2065   'it': undeclared identifier DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C2065   'it': undeclared identifier DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C2760   syntax error: ')' was unexpected here; expected ';' DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C3878   syntax error: unexpected token ')' following 'expression-statement' DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C2065   'it': undeclared identifier DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    10
Error   C3878   syntax error: unexpected token 'it' following 'expression'  DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C2760   syntax error: ')' was unexpected here; expected ';' DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C2065   'it': undeclared identifier DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C2065   'it': undeclared identifier DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C2760   syntax error: ')' was unexpected here; expected ';' DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C3878   syntax error: unexpected token ')' following 'expression-statement' DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    9
Error   C2065   'it': undeclared identifier DM_Data D:\Dev\DutySuiteVS17_test2\3p\conan\include\TRConan\delete_all.h    10
Error   C3878   syntax error: unexpected token 'x' following 'expression'   DM_Data D:\Dev\DutySuiteVS17_test2\dutymanager2\DM_Data\Utilities.h 173
Error   C2760   syntax error: ')' was unexpected here; expected ';' DM_Data D:\Dev\DutySuiteVS17_test2\dutymanager2\DM_Data\Utilities.h 173
Error   C3878   syntax error: unexpected token ')' following 'expression-statement' DM_Data D:\Dev\DutySuiteVS17_test2\dutymanager2\DM_Data\Utilities.h 173
Error   C7510   'Iterator': use of dependent type name must be prefixed with 'typename' DM_Data D:\Dev\DutySuiteVS17_test2\dutymanager2\DM_Data\Utilities.h 173
Error   C3878   syntax error: unexpected token 'x' following 'expression'   DM_Data D:\Dev\DutySuiteVS17_test2\dutymanager2\DM_Data\Utilities.h 188
Error   C2760   syntax error: ')' was unexpected here; expected ';' DM_Data D:\Dev\DutySuiteVS17_test2\dutymanager2\DM_Data\Utilities.h 188
Error   C3878   syntax error: unexpected token ')' following 'expression-statement' DM_Data D:\Dev\DutySuiteVS17_test2\dutymanager2\DM_Data\Utilities.h 188
Error   C7510   'Iterator': use of dependent type name must be prefixed with 'typename' DM_Data D:\Dev\DutySuiteVS17_test2\dutymanager2\DM_Data\Utilities.h 188
Hier ist MCVE.

Code: Select all

#include 

template 
void delete_all(T& t)
{
for (T::const_iterator it = t.begin(); it != t.end(); ++it)
delete *it;
t.clear();
}

void test(std::vector& v) {
delete_all(v);
}
Es stellte sich heraus, dass das Problem in beiden Fällen ein fehlender Typname war. Ich möchte die Lösung @MarekR zuschreiben, auch wenn ich dies nicht tun kann, da die Frage geschlossen wurde.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post