J'ai lu d'autres articles similaires mais je ne comprends tout simplement pas ce que j'ai fait de mal. Je pense que ma déclaration des vecteurs est correcte. J'ai même essayé de déclarer sans taille mais même cela ne fonctionne pas. Mon code est:
#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;
}
Tu ne peux pas faire ça:
vector<string> name(5); //error in these 2 lines
vector<int> val(5,0);
dans une classe en dehors d'une méthode.
Vous pouvez initialiser les membres de données au point de déclaration, mais pas avec ()
supports:
class Foo {
vector<string> name = vector<string>(5);
vector<int> val{vector<int>(5,0)};
};
Avant C++ 11, vous devez d'abord les déclarer, puis les initialiser par exemple dans un constructeur
class Foo {
vector<string> name;
vector<int> val;
public:
Foo() : name(5), val(5,0) {}
};
Initialisations avec (...)
dans le corps de classe n'est pas autorisé. Utilisation {..}
ou = ...
. Malheureusement, puisque le constructeur respectif est explicit
et vector
a un constructeur de liste d'initialisation, vous avez besoin d'un cast fonctionnel pour appeler le constructeur voulu
vector<string> name = decltype(name)(5);
vector<int> val = decltype(val)(5,0);
Comme alternative, vous pouvez utiliser des listes d'initialisation de constructeur
Attribute():name(5), val(5, 0) {}
Étant donné que votre compilateur ne prend probablement pas encore en charge la totalité de C++ 11, qui prend en charge une syntaxe similaire, vous obtenez ces erreurs car vous devez initialiser vos membres de classe dans les constructeurs:
Attribute() : name(5),val(5,0) {}