C ++ Векторный класс как член другого класса - PullRequest
0 голосов
/ 14 октября 2009

Пожалуйста, у меня есть этот код, который дает мне много ошибок:

//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;
}

Может кто-нибудь сказать мне, что с ним не так?

Ответы [ 5 ]

16 голосов
/ 14 октября 2009

Это:

#include <vector>

Вы используете угловые скобки, потому что это часть стандартной библиотеки , "", просто компилятор сначала просматривает другие каталоги, что излишне медленно. И он расположен в пространстве имен std:

std::vector<double>

Вам необходимо указать ваш вектор в правильном пространстве имен:

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

};

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

Упрощено с помощью 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;
}

Кроме того, не забудьте быть const-правильными :

const container_type& GetWeight() const; // const because GetWeight does
                                         // not modify the class
2 голосов
/ 14 октября 2009

Во-первых, #include <vector>. Обратите внимание на угловые скобки.

Во-вторых, это std :: vector, а не просто vector (или используйте директиву using).

В-третьих, не возвращайте векторы по значению. Это тяжело и обычно совершенно не нужно. Вместо этого верните ссылку [const]

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

const std::vector<double>& Neuron::GetWeight() const
{ 
  return lstWeights;
}
1 голос
/ 14 октября 2009
#ifndef Neuron_h
#define Neuron_h
#include "vector"

using std::vector;

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

};
#endif

попробуйте

0 голосов
/ 14 октября 2009

Префикс vector<double> с std::, например, std::vector<double>, должен сделать работу.

0 голосов
/ 14 октября 2009

попробуйте заменить vector на std::vector, а-ля:

std::vector<double> lstWeights;

Проблема в том, что стандартные контейнеры находятся в стандартном пространстве имен, поэтому вам нужно как-то сообщить компилятору, что вы хотите использовать версию вектора стандартного пространства имен; Вы делаете это одним из нескольких способов, std::vector является наиболее явным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...