【发布时间】:2016-08-26 19:40:45
【问题描述】:
我有一个 Team 类和一个 Ball 类,我在 Team 的构造函数中创建了一个向量,其中填充了另一个名为 Player 的类的对象。所以我想在 Ball 类中使用这个向量,但即使我将它定义为外部(公共)编译器也一直告诉我,我对作为我的向量的团队有未定义的引用。下面是 Team.cpp 和 Ball.cpp 的代码 Team.h
#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
Team.cpp
#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.h 的代码,注意我注释了所有不影响问题的方法。
#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
这是 Ball.cpp 的代码,请注意,如果我创建一个新的(并且显然是不同的 Player 命名团队的向量,它将正确编译),则在方法分配中
#include "Ball.h"
#include "Team.h"
#include "Player.h"
extern vector<Player> team;
Ball::Ball()
: X_ball(2),
Y_ball(5)
{
current = NULL;
previous = NULL;
}
void Ball::assign(){
//vector<Player> team;
int x;
int y;
x=(team[0].getX())-X_ball;
y=(team[0].getY())-Y_ball;
int min=x+y;
int k=0;
for (int i=1; i<team.size(); i++){
x=(team[i].getX())-X_ball;
y=(team[i].getY())-Y_ball;
int sum=x+y;
if(sum<min){
k=i;
}
}
current = &team[k];
}
【问题讨论】:
-
你只是继续声明向量变量,但你从未真正在任何地方定义它。
-
即使我输入 extern
team;在 Team.h 的公共上,它会产生相同的错误 -
@GerasimosRagavanis -- 你知道如何在多模块程序中声明和定义全局变量吗?这就是问题所在——它与
vector无关。改成int,还是一样的问题。 -
与
vector无关。您尚未在代码中的任何位置定义变量。你已经externed 把它写死了,但是在一个(而且只有一个)模块中没有vector<Player> team;没有extern。 -
感谢您的回答和耐心等待。我想这会解决我的问题。