在构造函数中创建的外部向量

时间:2016-08-26 19:40:46

标签: c++ vector

我有一个类Team和一个Ball类,我在Team的构造函数中创建了一个向量,该向量填充了另一个名为Player的类的对象。所以我想在Ball类中使用这个向量,但即使我将它定义为extern(公共)编译器一直告诉我,我有未定义的引用团队是我的向量。以下是Team.cpp和Ball.cpp的代码 的 Team.h

>>> import datetime
>>> today=datetime.datetime.now()
>>> today
datetime.datetime(2016, 8, 27, 1, 7, 1, 909049)
>>> value=today.strftime("%d/%m/%Y")
'27/08/2016'
>>> sheet1.write(row,col,sheet.cell(row,col).value)

Team.cpp

#define TEAM_H
#include <iostream>
#include <vector>
#include "Player.h"

using namespace std; 
extern vector<Player> team; 
class Team {
    public:
        Team();

        void fillTeamVector(vector<Player>&);

    private:
        string teamName;
        int faults;
        int passes;
        int goals;

};

#endif // TEAM_H

接下来是 Ball.h 的代码,注意我评论了所有不影响问题的方法。

#include "Team.h"
#include <vector>
#include <iostream>
#include "Player.h"
#include "Attacker.h"
#include "Defender.h"
#include "Ball.h"

Team::Team()
{
    extern vector<Player> team;
    fillTeamVector(team);
}

void Team::fillTeamVector(vector<Player>& team){

// do stuff and store them on vector team
}

以下是 Ball.cpp 的代码请注意,在方法分配中,如果我创建一个新的(显然不同的Player命名团队矢量,它将正确编译)

#ifndef BALL_H
#define BALL_H
#include "Player.h"

class Ball
{
    public:
        Ball();
        Player* current;
        Player* previous;

        /*void setX_ball(int);
        int getX_ball() const;
        void setY_ball(int);
        int getY_ball() const;*/
        void assign();
        //void changeCurrentToPrevious();
        //void changeNextToCurrent(Player*);


    private:
        int X_ball;
        int Y_ball;
};

#endif // BALL_H

1 个答案:

答案 0 :(得分:3)

通过

extern vector<Player> team;

你只声明变量。

在一个源文件中,您实际上必须定义变量:

vector<Player> team;

请注意定义中缺少extern

另请注意,这必须在 global 范围内完成,因为您需要一个全局变量。所以它必须在任何函数或类或名称空间之外定义。