为什么在包含类头的情况下,我的数组在main中未定义

Why is my array undefined in main when the class headers are included?

本文关键字:数组 main 未定义 我的 情况下 包含类 为什么      更新时间:2023-10-16

所以这里是我试图通过指针调用数组的主要位置:

#include <iostream>
#include "Lottery.h"
#include "Player.h"
#include "LotteryData.h"
using namespace std;
int main()
{
    Player player;
    Lottery random;
    LotteryData data;
    player.Input();
    random.setRandomNumber();
    data.PassInfo(int (&Numbers)[6][6]);   
}

显然,"Numbers"是未定义的,即使包含了标头,下面是与之相关的标头和.cpp文件。

LotteryData.h

#pragma once
#include <iostream>
#include <fstream>
#include "Lottery.h"
#include "Player.h"
using namespace std;
class LotteryData
{
    private:
    public:
    LotteryData();
    ~LotteryData();
    void PassInfo(int (&Numbers)[6][6]);
};

彩票数据.cpp

#include <iostream>
#include <fstream>
#include "LotteryData.h"
using namespace std;
LotteryData::LotteryData()
{
}
LotteryData::~LotteryData()
{
}
void LotteryData::PassInfo(int (&Numbers)[6][6])
{
    int* ptr;
    FILE *Numfile;
    Numfile = fopen("C:/Num.txt", "wb");
    ptr = &Numbers[6][6];
    for (int i=0; i<36; i++)
    {
        fwrite(ptr, sizeof(int), 36*36, Numfile);
    }
    fclose(Numfile);
    //ofstream out("Numbers.txt");
}

一切似乎都很好,我很困惑为什么主要的引用说数组是未定义的,有什么想法吗?

编辑:道歉,错过了一些位

Player.h

#pragma once
#include <iostream>
#include <fstream>
using namespace std;
class Player
{
    private:
    public:
    Player();
    ~Player();
    void Input(); 
    int Numbers[6][6];
};

播放器.cpp

#include <iostream>
#include <fstream>
#include "Player.h"
using namespace std;
Player::Player()
{
}
Player::~Player()
{
}
void Player::Input()
{
    int num(0);
    int duplicate = 0;
    int game = 0;
    int NumberofGames = 0;
    cout<<"How many games do you want to play for this weeks draw?"<<endl;
    cin>>NumberofGames;
    if (NumberofGames>6)
    {
        cout<<"Please enter an amount between 1 and 6"<<endl;
        cin>>NumberofGames;
    }
    do
    {
        for (int i=0;i<6;i++)
        {
            cout<<"Enter Number "<< (i+1) <<endl;
            cin>>num;
            if (num > 0 && num <67)
            {
                Numbers[game][i]= num;
            }
            else
            {
                cout <<"Please enter number between 1 and 66"<<endl;
                i = i-1;
            }
        }
        game = game + 1;
        NumberofGames = NumberofGames - 1;
    }
    while (NumberofGames=0);
}
void PassInfo(int (&Numbers)[6][6]);

这一行并没有声明一个数组,而是声明了一个函数。类中没有数组的声明(事实上,类中根本没有声明任何数据成员)。

如果你想声明一个成员数组,你需要修改你的类定义:

class LotteryData
{
private:
        int Numbers[6][6]; // this declares an array
public:
    LotteryData();
    ~LotteryData();
    void PassInfo(int (&arr)[6][6]); // this is still a function declaration
};

仅仅因为您将函数的参数命名为Numbers并不意味着您的程序中声明了一个名为Numbers的数组。

所以Player有一个名为"Numbers"的数组。

然后你会这样使用它:

data.PassInfo(player.Numbers);   

在main()函数中,

data.PassInfo(int (&Numbers)[6][6]); 

这是错误的。您应该简单地传递对2D数组的引用。

int (&Numbers)[6][6];
data.PassInfo(Numbers);