C++ compileertijdfout: verwachte identifier vóór numerieke constante

Ik heb andere soortgelijke berichten gelezen, maar ik begrijp gewoon niet wat ik verkeerd heb gedaan. Ik denk dat mijn verklaring van de vectoren correct is. Ik heb zelfs geprobeerd zonder maat aan te geven, maar zelfs dat werkt niet. Wat is er mis??
Mijn code is:

#include <vector> 
#include <string>
#include <sstream>
#include <fstream>
#include <cmath>
using namespace std;
vector<string> v2(5, "null");
vector< vector<string> > v2d2(20,v2);
class Attribute //attribute and entropy calculation
{
    vector<string> name(5); //error in these 2 lines
    vector<int> val(5,0);
    public:
    Attribute(){}
int total,T,F;
};  
int main()
{  
Attribute attributes;
return 0;
}

Antwoord 1, autoriteit 100%

U kunt dit niet doen:

vector<string> name(5); //error in these 2 lines
vector<int> val(5,0);

in een klasse buiten een methode.

U kunt de gegevensleden initialiseren op het punt van aangifte, maar niet met ()haakjes:

class Foo {
    vector<string> name = vector<string>(5);
    vector<int> val{vector<int>(5,0)};
};

Vóór C++11 moet u ze eerst declareren en vervolgens initialiseren, bijvoorbeeld in een constructor

class Foo {
    vector<string> name;
    vector<int> val;
 public:
  Foo() : name(5), val(5,0) {}
};

Antwoord 2, autoriteit 12%

Initialisaties met (...)in de hoofdtekst van de klasse zijn niet toegestaan. Gebruik {..}of = .... Helaas, aangezien de respectievelijke constructor explicitis en vectoreen initializerlijstconstructor heeft, heb je een functionele cast nodig om de gewenste constructor aan te roepen

vector<string> name = decltype(name)(5);
vector<int> val = decltype(val)(5,0);

Als alternatief kunt u constructor-initialisatielijsten gebruiken

Attribute():name(5), val(5, 0) {}

Antwoord 3, autoriteit 2%

Aangezien je compiler waarschijnlijk nog niet alle C++11 ondersteunt, die vergelijkbare syntaxis ondersteunt, krijg je deze fouten omdat je je klasleden moet initialiseren in constructors:

Attribute() : name(5),val(5,0) {}

Other episodes