Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
szintaxishiba: 'token'
Megjegyzések
A jogkivonat szintaxishibát okozott.
Példák
Az alábbi példa egy hibaüzenetet hoz létre a deklarált jsorhoz.
// C2059e.cpp
// compile with: /c
// C2143 expected
// Error caused by the incorrect use of '*'.
int j*; // C2059
A hiba okának meghatározásához ne csak a hibaüzenetben felsorolt sort vizsgálja meg, hanem a fölötte lévő sorokat is. Ha a sorok vizsgálata nem ad információt a problémáról, próbáljon meg megjegyzést fűzni a hibaüzenetben felsorolt sorhoz, és esetleg több sornyit is.
Ha a hibaüzenet egy olyan szimbólumon jelenik meg, amely azonnal követi a változót typedef , győződjön meg arról, hogy a változó a forráskódban van definiálva.
A C2059 akkor jön létre, ha egy előfeldolgozó szimbólum nevét újra azonosítóként használják. Az alábbi példában a fordító az 1-es számot látja DIGITS.ONE , amely nem érvényes számelemnévként:
#define ONE 1
enum class DIGITS {
ZERO,
ONE // error C2059
};
A C2059-et akkor kaphatja meg, ha egy szimbólum semmire nem értékel, ahogy az /Dszimbólum= fordítására is használható.
// C2059a.cpp
// compile with: /DTEST=
#include <stdio.h>
int main() {
#ifdef TEST
printf_s("\nTEST defined %d", TEST); // C2059
#else
printf_s("\nTEST not defined");
#endif
}
A C2059 akkor is előfordulhat, ha olyan alkalmazást állít össze, amely egy függvény alapértelmezett argumentumaiban egy struktúrát határoz meg. Az argumentum alapértelmezett értékének kifejezésnek kell lennie. Az inicializálók listája – például egy struktúra inicializálására használt – nem kifejezés. A probléma megoldásához definiáljon egy konstruktort a szükséges inicializálás végrehajtásához.
Az alábbi példa c2059-et hoz létre:
// C2059b.cpp
// compile with: /c
struct ag_type {
int a;
float b;
// Uncomment the following line to resolve.
// ag_type(int aa, float bb) : a(aa), b(bb) {}
};
void func(ag_type arg = {5, 7.0}); // C2059
void func(ag_type arg = ag_type(5, 7.0)); // OK
C2059 előfordulhat egy rosszul formázott leadott.
Az alábbi példa c2059-et hoz létre:
// C2059c.cpp
// compile with: /clr
using namespace System;
ref class From {};
ref class To : public From {};
int main() {
From^ refbase = gcnew To();
To^ refTo = safe_cast<To^>(From^); // C2059
To^ refTo2 = safe_cast<To^>(refbase); // OK
}
C2059 akkor is előfordulhat, ha egy pontot tartalmazó névtérnevet próbál létrehozni.
Az alábbi példa c2059-et hoz létre:
// C2059d.cpp
// compile with: /c
namespace A.B {} // C2059
// OK
namespace A {
namespace B {}
}
C2059 akkor fordulhat elő, ->ha egy nevet (::és .) minősítő operátort a kulcsszónak templatekell követnie, ahogyan az ebben a példában látható:
template <typename T> struct Allocator {
template <typename U> struct Rebind {
typedef Allocator<U> Other;
};
};
template <typename X, typename AY> struct Container {
typedef typename AY::Rebind<X>::Other AX; // error C2059
};
Alapértelmezés szerint a C++ azt feltételezi, hogy AY::Rebind ez nem sablon, ezért az alábbiakat < a rendszer kevesebb előjelként értelmezi. Ahhoz, hogy a fordítóprogram megfelelően tudja elemezni a szögletes zárójelet, kifejezetten meg kell adnia, hogy a Rebind egy sablon. A hiba kijavításához használja a template függő típus nevét tartalmazó kulcsszót az itt látható módon:
template <typename T> struct Allocator {
template <typename U> struct Rebind {
typedef Allocator<U> Other;
};
};
template <typename X, typename AY> struct Container {
typedef typename AY::template Rebind<X>::Other AX; // correct
};