【问题标题】:extern vector created in constructor在构造函数中创建的外部向量
【发布时间】: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&lt;Player&gt; team; 没有 extern
  • 感谢您的回答和耐心等待。我想这会解决我的问题。

标签: c++ vector


【解决方案1】:

通过做

extern vector<Player> team;

你只声明变量。

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

vector<Player> team;

注意定义中缺少extern

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

【讨论】:

  • @GerasimosRagavanis 如果您在函数内部执行此操作,那么您将定义一个 local 变量。您需要在任何函数之外的 global 范围内定义变量。
  • @GerasimosRagavanis 不,您应该在类中将其声明为成员变量
猜你喜欢
  • 2023-03-17
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多