2009-10-13 4 views
0

S'il vous plaît j'ai ce code qui me donne beaucoup d'erreurs:C++ classe Vector comme membre dans un autre classe

//Neuron.h File 
#ifndef Neuron_h 
#define Neuron_h 
#include "vector" 
class Neuron 
{ 
private: 
vector<double>lstWeights; 
public: 
vector<double> GetWeight(); 

}; 
#endif 

//Neuron.cpp File 
#include "Neuron.h" 
vector<double> Neuron::GetWeight() 
{ 
return lstWeights; 
} 

Quelqu'un pourrait-il me dire ce qui ne va pas avec elle?

+0

Non sans message d'erreur, habituellement ... – GManNickG

+0

Poster un peu plus de détails, les messages d'erreur, plus de code, etc – cx0der

+0

Voulez-vous dire std :: vector? Voulez-vous renvoyer une copie de l'ensemble verctor chaque fois que GetWeight() est appelé? – stefanB

Répondre

16

Il est:

#include <vector> 

Vous utilisez équerres, car il fait partie de la standard library « » avec juste faire le look du compilateur dans d'autres répertoires d'abord, qui est inutilement lent. Et il se trouve dans l'espace de noms std:

std::vector<double> 

Vous devez qualifier votre vecteur dans l'espace de noms correct:

class Neuron 
{ 
private: 
std::vector<double>lstWeights; 
public: 
std::vector<double> GetWeight(); 

}; 

std::vector<double> Neuron::GetWeight() 

Fait plus simple avec de typedef:

class Neuron 
{ 
public: 
    typedef std::vector<double> container_type; 

    const container_type& GetWeight(); // return by reference to avoid 
             // unnecessary copying 

private: // most agree private should be at bottom 
    container_type lstWeights; 
}; 

const Neuron::container_type& Neuron::GetWeight() 
{ 
return lstWeights; 
} 

De plus, n » t oublier d'être const-correct:

const container_type& GetWeight() const; // const because GetWeight does 
             // not modify the class 
+0

ou 'using namespace std;' – ChrisW

+4

@ChrisW mauvaise idée en général, il pourrait y avoir une classe de vecteur dans une autre bibliothèque. –

+0

@ChrisW Je suis sûr que vous le savez, mais pour l'amour de l'auteur, vous ne devriez pas inclure tout "std ::" dans un en-tête. Soit simplement en utilisant std :: vector' après l'instruction '# include', soit en le référant comme' std :: vector 'chaque fois que –

1
#ifndef Neuron_h 
#define Neuron_h 
#include "vector" 

using std::vector; 

class Neuron 
{ 
private: 
vector<double>lstWeights; 
public: 
vector<double> GetWeight(); 

}; 
#endif 

essayer que

+0

Cela ne fonctionnera toujours pas, sauf si OP a une bibliothèque nommée "vector" dans le même répertoire. Il a probablement signifié '#include ' –

+0

s/ne fonctionnera pas/n'est pas vraiment le plus correct –

+0

bon point, monsieur –

0

essayez de remplacer vector avec std::vector, a la:

std::vector<double> lstWeights; 

Le problème est que les conteneurs standard sont dans l'espace de noms standard, donc vous devez laisser en quelque sorte au compilateur que vous souhaitez utiliser la version de vecteur de l'espace de nom standard; vous faites cela de plusieurs façons, std::vector étant le plus explicite.

0

Le préfixe vector<double> avec std::, par ex. std::vector<double>, devrait faire le travail.

2

Premièrement, #include <vector>. Notez les parenthèses angulaires.

Deuxièmement, c'est 'std :: vector', pas seulement 'vector' (ou utilisez la directive 'using').

Troisièmement, ne renvoyez pas de vecteurs par valeur. C'est lourd et généralement complètement inutile. Retour un [const] référence au lieu

class Neuron { 
private: 
    std::vector<double> lstWeights; 
public: 
    const vector<double>& GetWeight() const; 
};  

const std::vector<double>& Neuron::GetWeight() const 
{ 
    return lstWeights; 
} 
Questions connexes