Doesn't initialize .....? What kind?

Pickup::Pickup(std::vector<Agent, std::allocator<Agent>> &agents)" provides no initializer for: 

I get this error for several of my constructors, it is annoying that the error ends abruptly before it tells me why I am not providing an initializer. In addition, I am sure that in fact I am providing initialization of everything that needs it. Can anyone shed some light on this?

 #include "Pickup.h" Pickup::Pickup(vector<Agent>& agents) : GameObject(), TOLERANCE(0.1f) { // this brace is underlined and is where the error occurs. xRotation = D3DXVECTOR3(0.005f, 0.005f, 0.04f); count = 0; index = -1; nodeIndex = -1; isPresent = true; } void Pickup::Regenerate() { //when the pickup gets picked up, start a countdown count++; if (count == 300) { isPresent = true; count = 0; } } //void Pickup::addAmmo(int agentIndex) { } void Pickup::Update() { Rotation(Rotation() + xRotation); for (unsigned int i = 0; i < agents.size(); i++) { //if (D3DXVec3Length(agents[i].MainLegsPosition() - Position()) < TOLERANCE && isPresent)//right here //{ // addAmmo(agents[i].Index()); // isPresent = false; //} } if (isPresent == false) { Regenerate(); } } /*void Pickup::Draw(D3DXMATRIX matView, D3DXMATRIX matProjection, ID3D10Effect* effect)//right here { if (isPresent == true) { Draw(matView, matProjection, effect); } }*/ // getters int Pickup::Index() { return index; } int Pickup::NodeIndex() { return nodeIndex; } bool Pickup::IsPresent() { return isPresent; } /* vector<Agent>& Pickup::Agents() { return agents; }*/ // setters void Pickup::Index(int index) { this->index = index; } void Pickup::NodeIndex(int nodeIndex) { this->nodeIndex = nodeIndex; } 

Title:

 #ifndef PICKUP_H #define PICKUP_H #include "gameObject.h" #include "Agent.h" #include <vector> using namespace std; class Pickup : public GameObject { private: int count; int index; int nodeIndex; bool isPresent; D3DXVECTOR3 xRotation; const float TOLERANCE; void Regenerate(); protected: vector<Agent>& agents; public: Pickup(vector<Agent>& agents); virtual void addAmmo(int agentIndex); void Update(); void Draw(); // getters int Index(); int NodeIndex(); bool IsPresent(); // setters void Index(int index); void NodeIndex(int nodeIndex); }; #endif 
+4
source share
2 answers

The agents element is not initialized.

+4
source

The constructor does not initialize the 'agents' attribute. It must be initialized in the constructor initialization list. It is also recommended to initialize all attributes in the initialization list (count, index, nodeIndex, ...) instead of assigning values ​​to them.

And by the way, why is the 'agents' attribute protected? It must be closed. You should not allow direct attribute changes over derived classes. This avoids messy code.

Greetings.

0
source

Source: https://habr.com/ru/post/1380147/


All Articles