gpt4 book ai didi

c++ - 在构造函数中创建的外部 vector

转载 作者:搜寻专家 更新时间:2023-10-31 01:34:35 26 4
gpt4 key购买 nike

我有一个 Team 类和一个 Ball 类,我在 Team 的构造函数中创建了一个 vector ,其中填充了另一个名为 Player 的类的对象。所以我想在 Ball 类中使用这个 vector ,但即使我将它定义为外部(公共(public))编译器也一直告诉我我有未定义的团队引用,这是我的 vector 。下面是 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

团队.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 的代码,请注意,如果我在方法 assign 中创建一个新的(显然是不同的 Player 命名团队 vector ,它将正确编译)

#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 vector<Player> team;

您只需声明变量。

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

vector<Player> team;

注意定义中缺少 extern

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

关于c++ - 在构造函数中创建的外部 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39173647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com