Waarom krijg ik de fout "multiple types in one declaration"
wanneer ik mijn C++-programma compileer?
Antwoord 1, autoriteit 100%
Je hebt waarschijnlijk code die het equivalent is van
int float x;
waarschijnlijk
class Foo { } float x;
of in de meest voorkomende vorm (let op de ontbrekende puntkomma na het sluiten van de accolade)
class Foo {
//
}
float x;
Antwoord 2, autoriteit 31%
Vergeet niet te controleren op ;
ook na enum-declaraties.
Antwoord 3, autoriteit 22%
Ik had hetzelfde probleem. Soms geeft de foutregel niet de juiste plaats aan. Doorloop alle nieuw gemaakte/aangepaste klassen en kijk of u “;” vergeet aan het einde van de klasdefinitie.
Antwoord 4, autoriteit 10%
Je moet twee keer dezelfde variabele hebben gedeclareerd in een klasse of twee klassen met dezelfde naam. Zie bijvoorbeeld ditop Stack Overflow.
Je zou ook een ;
kunnen missen of je zou een klassedefinitie kunnen hebben met een gebroken syntaxis …
Als je ons wat code kunt laten zien, zou dat beter zijn!
Antwoord 5, autoriteit 7%
Ik vermoed dat je ergens in een klassedefinitie een accolade mist, of een puntkomma erachter.
Antwoord 6, autoriteit 6%
Het kan ook zijn dat u een puntkomma in een voorwaartse aangifte bent vergeten:
class Foo // <-- forgot semicolon
class Bar {
...
};
Antwoord 7, autoriteit 3%
Hier is nog een ander scenario waarin dezelfde fout kan verschijnen
struct Field
{ // <------ Forget this curly brace
enum FieldEnum
{
FIRSTNAME,
MIDDLENAME,
LASTNAME,
UNKNOWN
};
};
Antwoord 8
Eens met het bovenstaande. Als je dit ziet, verwerk dan de app vooraf en kijk naar de .i
Zoek naar de “beledigende” naam. Kijk dan weer omhoog. Je zult vaak de “}” zien zonder “;” op een klasse in de eerste niet-met spatie erboven. Het probleem vinden is vaak moeilijker dan weten wat het is.
Antwoord 9
C- of C++-fout: “meerdere typen in één declaratie”: Verdere uitleg voor het geval u gewoon de puntkomma (;
) aan het einde van een klassebent vergeten , enumof structdefinitie
Stel je voor dat je de volgende code hebt:
enum class ErrorType {
MY_ERROR_1 = 0,
MY_ERROR_2,
MY_ERROR_3,
/// Not a valid value; this is the number of enums
_COUNT,
} // <====== MISSING SEMICOLON (;)!
class MyClass {
public:
// some stuff
private:
// some stuff
};
Aangezien ik de puntkomma (;
) aan het einde van de enum class
-definitie ben vergeten, na de accolade, lijkt het eropdat ik ben de hele class MyClass
binnenkant vande enum class ErrorType
aan het definiëren, dus ik krijg de foutmelding!:
../my_header.h:43:1: error: multiple types in one declaration 43 | }; | ^
…waar regel 43 in mijn geval aan het einde van de class MyClass
-definitie staat.
OPLOSSING: voeg de ontbrekende puntkomma (;
) toe aan het einde van de enum
-definitie, zoals aangegeven door @eguaio hieren @MSalters hier.