He leído otros puestos similares, pero yo no entiendo lo que he hecho mal. Creo que mi declaración de los vectores es correcta. Incluso probé a declarar sin tamaño, pero incluso que no está funcionando.Lo que está mal??
Mi código es:

#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;
}
  • ¿Qué estás tratando de hacer con 5 y 0 en sus llamadas a la vector constructor? Esto es lo que los argumentos de decir: cplusplus.com/reference/stl/vector/vector
  • Yo simplemente estaba tratando de usar: explícito vector ( size_type n, const T& valor= T () const Asignador& = Asignador() ); como su enlace muestra: vector<int> segunda (4,100);
  • terrible noción, la std biblioteca es parte de C++, que sin duda deben aprender a utilizarlos juntos.
  • Las bibliotecas no son parte del lenguaje (OMI), solo que no son estandarizados. printf y cout no son conceptos de lenguaje, que proceden de la biblioteca. Y me refería a OP que él/ella debe aprender los conceptos básicos de primera!
InformationsquelleAutor user1484717 | 2012-07-15

3 Comentarios

  1. 57

    Usted no puede hacer esto:

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

    en una clase fuera de un método.

    Se pueden inicializar los datos de los miembros en el momento de la declaración, pero no con () soportes:

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

    Antes de C++11, deberá declarar en primer lugar, a continuación, inicializar ellos el correo.g en un contructor

    class Foo {
        vector<string> name;
        vector<int> val;
     public:
      Foo() : name(5), val(5,0) {}
    };
    • Compilador que se admite que «de C++11» característica ?
    • GCC desde 4.7, consulte aquí, probablemente la última clang. No seguro lo que la VS calendario de la liberación es, pero he oído la versión más reciente sería soporte de todas las características.
    • Muy bien, gracias! He GCC 4.6 en Windows, lo que no es compatible con esta. VC11 también no es compatible con esta.
    • Podría usted explicar esto: «usted no puede hacer esto, en una clase FUERA de un método» ? Suena como que podría SÓLO SI lo hacemos DENTRO de un método en una clase, ¿no? @juanchopanza
    • Dentro de un método en una clase es uno de los lugares donde puedes hacerlo. También se puede hacer en un país no miembro de la función, o cuando se declara, por ejemplo, una variable global.
    • Lo consiguió gracias! Podría, por favor, preguntar también ¿por qué no es posible hacerlo de una variable de clase en una clase, mientras que podemos para una variable global
    • La idea era hacer que sea imposible tener una situación en la que se declara un miembro de datos podría ser analizada como una función. Bucle hasta «el más irritantes que analizar».

  2. 6

    Inicializaciones con (...) en el cuerpo de la clase no está permitido. Uso {..} o = .... Desafortunadamente desde el respectivo constructor es explicit y vector tiene una lista de inicializador de constructor, usted necesita un funcional de fundición para llamar la quería constructor

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

    Como alternativa, puede utilizar inicializador de constructor de listas de

     Attribute():name(5), val(5, 0) {}
  3. 2

    Desde su compilador probablemente no sea compatible con todos los de C++11 sin embargo, que admite la sintaxis similar, usted está consiguiendo estos errores, porque tienes que inicializar los miembros de la clase en constructores:

    Attribute() : name(5),val(5,0) {}
    • La sintaxis proporcionada por no trabajar en C++11, tan solo brace-or-equal de inicialización es permitido cuando se declara una variable.

Dejar respuesta

Please enter your comment!
Please enter your name here