我有一个类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
答案 0 :(得分:3)
通过
extern vector<Player> team;
你只声明变量。
在一个源文件中,您实际上必须定义变量:
vector<Player> team;
请注意定义中缺少extern
。
另请注意,这必须在 global 范围内完成,因为您需要一个全局变量。所以它必须在任何函数或类或名称空间之外定义。