C ++类依赖于本地的declorations

时间:2016-08-11 01:50:36

标签: c++ arrays function class boolean

我正在编写一个包含将创建多维数组bool数组的函数的类,以多维方式存储bool值以及打印多维数组。

到目前为止,我的班级目前工作正常。但是我希望我的类函数不必每次想要一个类函数来完成一个任务时都要创建一个局部多维数组。如果我可以将其创建为会员数据,那将是理想的但我不确定是否可行,或者至少我做错了很多次它让我相信这是不可能的。

旁注我仍然是c ++的新手,所以请不要提交包含指针的答案,因为我不知道它们是如何工作的,现在只会让我更加困惑。

这是我的代码,感谢您的时间和投入,非常感谢!

//-----------------------------------------------------------------------
//class declorations.
// .h file
#ifndef STACK_H
#define STACK_H
using namespace std;

class stackClass{
    public:  
        const static int index_one = 10;
        const static int index_two = 10;
        //const static bool boolray[index_one][index_two];
        stackClass();
        void set(const int iacross, const int ivert);
        void print();


    private:
        int across;
        int vert;
        const static bool the_array[index_one][index_two];


};

#endif
//----------------------------------------------------------------------------
// class definitions
// .cpp file

#include<iostream>
#include "stack.h"
using namespace std;

stackClass :: stackClass(){
bool the_array[index_one][index_two];
for(int across = 0; across < index_one; across++)
    for(int vert = 0; vert < index_two; vert++)  
        the_array[across][vert] = false;
}

void stackClass :: print(){
    bool the_array[index_two][index_one];
    for (int across = 0; across < index_one; across++){ 
        for (int vert = 0; vert < index_two; vert++){
                if(the_array[across][vert] == true){
                    cout << "*";
                }
                else{
                    cout << " ";
                }

        }   
cout << endl;
    }
    }

void stackClass :: set(int iacross, int ivert){
iacross=across;
ivert=vert;
}
//--------------------------------------------------
// clinet program for testing
// .cpp file
#include<iostream>
#include "stack.h"
#include <cstdlib>
using namespace std;

int main(){

    stackClass obj1;
    for (int count = 0; count < 5; count++) { 
    obj1.set(rand()%20, rand()%20);
    }
    obj1.print();

return 0;
}

2 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。首先,您的set函数没有做任何事情。您正在为函数的参数赋值。你的意思是代替across=iacross;(和ivert相同)吗?

接下来,您的构造函数也没有做任何有用的事情。它会创建一个本地数组并对其进行初始化,但只要该函数结束,本地数组就会消失。

然后你的print函数创建一个新的本地数组,不初始化它,然后从中读取值。所以它只是从内存中打印垃圾。

如果我理解正确,这就是你想要做的。您有一个私人会员the_array,您想要使用它。首先,它不应该是const,可能不是static(不确定为什么你让它静止但是由你决定)。然后在你的构造函数中,摆脱行

bool the_array[index_one][index_two];

这样,其余代码将初始化您的成员the_array的值。此外,在您的打印功能中,删除相同的行,以便您可以从成员数组中读取。最后,在你的set函数中,我最好的猜测是你想要做的事情:

the_array[iacross][ivert] = true;

,别无其他。

答案 1 :(得分:0)

如果您希望the_array成为成员变量,则应在没有static关键字的情况下声明它。

即,替换

const static bool the_array[index_one][index_two];

bool the_array[index_one][index_two];

stack.h

中的

此外,正如@grigor所提到的,你的代码有一些错误,可能没有像你预期的那样正常工作。