【问题标题】:Why is my array undefined in main when the class headers are included?当包含类头时,为什么我的数组在 main 中未定义?
【发布时间】:2013-12-12 15:35:51
【问题描述】:

所以这是我试图通过指针调用数组的主要地方:

#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]);   

}

显然“数字”是未定义的,即使包含了标头,这里是标头和与之相关的 .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]);
};

LotteryData.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");

}

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

编辑:抱歉,遗漏了一些内容

播放器.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);
}

【问题讨论】:

  • 等等,为什么将数字定义为o_O?
  • 也许我遗漏了一些东西,但实际上我没有看到在您的代码中的任何地方定义了Numbers...您认为它的定义在哪里?
  • @DavidNorris void LotteryData::PassInfo(int (&amp;Numbers)[6][6]),但它并没有像他认为的那样做。
  • @andre Zac 在下面的回答中所说的话……这不是 Numbers 的声明。
  • @user2288204 你有 c++11 可用吗?我建议使用std::array&lt;std::array&lt;int, 6&gt;, 6&gt;

标签: c++ arrays function-pointers


【解决方案1】:
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
};

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      然后你会这样使用它:

      data.PassInfo(player.Numbers);   
      

      【讨论】:

      • @user2288204 好。现在您需要修复fwrite 循环,因为它已严重损坏。
      • 刚刚注意到 fwrite 循环甚至不打印任何内容,只是创建了文件,尽管我不知道如何修复它。你能指出我明显遗漏的东西吗? :)
      • @user2288204 您正在从数组外部写入 1296 个整数(它的最后一个元素是 Elements[5][5])并且您正在编写相同的不存在的东西 36 次。这是非常不确定的行为(所以任何事情都可能发生)。
      【解决方案4】:

      在你的 main() 函数中,

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-23
        • 2019-07-10
        • 2011-12-22
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        • 2019-12-20
        • 1970-01-01
        相关资源
        最近更新 更多