.....没有提供初始化器?什么?

时间:2011-11-08 10:01:40

标签: c++

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

我为一些构造函数收到了这个错误,令人烦恼的是错误在它告诉我我没有提供初始化程序之前突然结束。另外,我很确定我实际上正在为需要它的所有东西提供初始化。任何人都可以对此有所了解吗?

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

头:

#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

2 个答案:

答案 0 :(得分:4)

会员agents未初始化。

答案 1 :(得分:0)

构造函数不会初始化属性&#39; agent&#39;。它必须在构造函数初始化列表中初始化。初始化初始化列表中的所有属性(count,index,nodeIndex,...)也是一种很好的做法,而不是为它们赋值。

顺便说一下,为什么“代理商”会在&#39;属性受保护?它应该是私人的。您不应允许派生类直接修改属性。它避免了凌乱的代码。

干杯。