C++ “meerdere typen in één aangifte”-fout

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 MyClassbinnenkant vande enum class ErrorTypeaan 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.

Other episodes