как правильно реализовать конструктор класса с stls внутри - PullRequest
0 голосов
/ 20 сентября 2010

эй, я пишу программу на C ++, и по какой-то причине компилятор находит ошибки и не может найти мой конструктор: вот мой класс: (внутри файла h)

class Adjutancy
{
private:
 vector<Vehicale*,CompareCatId>* m_vehicalesVector;
 map<const string,Base*>* m_baseMap;
 map<const int,City*>* m_citiesMap;
 vector<vector<Distance*>>* m_distancesMatrix;
public:

 Adjutancy(vector<Vehicale*,CompareCatId>* vehicalesVector , map<const string,Base*>* baseMap , map<const int,City*>* citiesMap , vector<vector<Distance*>>* distancesMatrix);
};

и вот моя реализация конструктора внутри файла cpp: извините за длину.

Adjutancy::Adjutancy(vector<Vehicale*,
  CompareCatId>* vehicalesVector,map<const string,Base*>* baseMap,
  map<const int,City*>* citiesMap,
  vector<vector<Distance*>>* distancesMatrix):
      m_vehicalesVector(vehicalesVector),
      m_baseMap(baseMap),
      m_citiesMap(citiesMap),
      m_distancesMatrix(distancesMatrix)
{}

по какой-то причине в моем основном я не могу использовать конструктор. заранее спасибо.

1 Ответ

2 голосов
/ 20 сентября 2010

Полагаю, вы имеете в виду эту настройку:

// file adjutancy.h
// ... includes for all classes used below
// forward declarations are OK for pointers and references
class Adjutancy
{
public:
    Adjutancy(vector<Vehicale*,CompareCatId>* vehicalesVector , map<const string,Base*>* baseMap , map<const int,City*>* citiesMap , vector<vector<Distance*>>* distancesMatrix);

private:
    vector<Vehicale*,CompareCatId>* m_vehicalesVector;
    map<const string,Base*>* m_baseMap;
    map<const int,City*>* m_citiesMap;
    vector<vector<Distance*>>* m_distancesMatrix;
};

// file adjutancy.cpp
#include "adjutancy.h"
Adjutancy::Adjutancy(vector<Vehicale*,CompareCatId>* vehicalesVector,map<const string,Base*>* baseMap,map<const int,City*>* citiesMap,vector<vector<Distance*>>* distancesMatrix)
:   m_vehicalesVector(vehicalesVector),
    m_baseMap(baseMap),
    m_citiesMap(citiesMap),
    m_distancesMatrix(distancesMatrix)
{   }

Это ужасный код, и по нескольким причинам:

  1. Вы храните указатель на std::vector s иstd::map s в вашем классе: просто храните vector s и map s сами, здесь указатели не нужны.В качестве альтернативы, сохраните ссылку, но остерегайтесь ограничений (без неинициализированных элементов справочных данных!).
  2. Вам следует избегать списков типов шаблонов с >>, ставить пробел между ними, или некоторые компиляторы будутневерно истолковать его как operator>>.
  3. Не используйте операторы using в своем заголовке, вместо этого используйте полный префикс пространства имен.

Я не могу сказать, что этонеправильно (на первый взгляд все выглядит правильно), пока вы не покажете мне свою main (завершенную!) функцию и то, как вы хотите использовать свой конструктор.


Лучшая версия:

// file adjutancy.h

#include <map>
#include <string>
#include <vector>
class Adjutancy
{
public:
    Adjutancy( std::vector<Vehicale*,CompareCatId> &vehicalesVector,
               std::map<const std::string,Base*> &baseMap,
               std::map<const int,City*> &citiesMap,
               std::vector<std::vector<Distance*> > &distancesMatrix );

private:
    std::vector<Vehicale*,CompareCatId> &m_vehicalesVector;
    std::map<const std::string,Base*> &m_baseMap;
    std::map<const int,City*> &m_citiesMap;
    std::vector<std::vector<Distance*> > &m_distancesMatrix;
};

// file adjutancy.cpp
#include "adjutancy.h"

#include <map>
    using std::map;
#include <string>
    using std::string;
#include <vector>
    using std::vector;

Adjutancy::Adjutancy( vector<Vehicale*, CompareCatId> &vehicalesVector,
                      map<const string, Base*> &baseMap,
                      map<const int, City*> &citiesMap,
                      vector<vector<Distance*> > &distancesMatrix )
:   m_vehicalesVector( vehicalesVector ),
    m_baseMap( baseMap ),
    m_citiesMap( citiesMap ),
    m_distancesMatrix( distancesMatrix )
{   }

Также помните: «транспортное средство» - правильное английское правописание.

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