我有一个2d数组,它是类的数据成员。我将其初始化为false
。
它位于自己的.cpp类文件中。
格式为:
//constructor
genericClassName::genericClassName(bool)
{
bool genericArray [3][3] =
{
{ false, false, false },
{ false, false, false },
{ false, false, false },
};
从我的main方法开始,我使用了以下格式的getter函数:
//creation of an object of the class
genericClassName objectName;
//console output
std::cout << objectName.getterFunction (1, 1) << std::endl;
()
中的数字是传递给getterFunction
的参数,用于表示二维数组的下标。按行顺序排列。
类.cpp文件中的getterFunction定义采用以下格式:
bool genericClassName::getterFunction (int row, int column)
{
return genericArray[row][column];
}
该功能未返回0
。相反,我得到一个三位数字。我不确定函数调用是否错误,数组的初始化是错误的,或者getter的定义是错误的。定义是否创建了一个不是数组初始化为false的本地数组?
吸气剂是公开的。该数组是私有的。
答案 0 :(得分:1)
你主要有两个问题:
问题 - 1:您已在构造函数中声明了一个数组,这样就不会初始化您的类成员。因此,当您使用getterFunction()
时,您正在访问未初始化的数组元素,这会产生一些垃圾值。
问题 - 2:您在此处提到过参数化构造函数,
//constructor
genericClassName::genericClassName(bool)
{ .... } ^^^^^^
并在不传递参数的情况下创建实例
//creation of an object of the class
genericClassName objectName; // this need a default constructor
^^^^^^^^^^^^
如果这是您的所有代码,我不认为,代码将编译,因为您没有在代码中定义任何default constructor
。
非一般的修复方法如下:SEE HERE
class genericClassName
{
private:
bool genericArray [3][3]; // this has be defined here/ not generic anymore
public:
genericClassName()
{
for (auto &row : genericArray)
for (auto& ele: row)
ele = false;
}
genericClassName(bool trueOrfalse)
{
for (auto &row : genericArray)
for (auto& ele: row)
ele = trueOrfalse;
}
.............
.............
为了使2D数组具有通用性,您可以使用std::vector
。这将如下所示:
#include <iostream>
#include <vector>
using Type2D = std::vector< std::vector<bool> >;
class genericClassName
{
private:
Type2D genericArray;
public:
genericClassName() // defualt constrctor with some random size
:genericArray(3, std::vector<bool>(3, false))
{}
genericClassName(bool trueOrfalse, int size) // use initilizer list here
:genericArray(size, std::vector<bool>(size, trueOrfalse))
{}
bool getterFunction (int row, int column)
{ return genericArray[row][column]; }
// just to print all elements
friend std::ostream& operator<<(std::ostream& out, const genericClassName& obj);
};
std::ostream& operator<<(std::ostream& out, const genericClassName& obj)
{
for (const auto &row : obj.genericArray)
for (const auto& ele: row)
out << ele << " ";
return out;
}
int main(void)
{
genericClassName objectName2; // works with default constrctor
std::cout << objectName2.getterFunction(1, 1) << std::endl;
std::cout << objectName2 << std::endl;
genericClassName objectName(true, 4); // specify the size of your 2D array as well
std::cout << objectName.getterFunction(1, 1) << std::endl;
std::cout << objectName << std::endl;
return 0;
}
答案 1 :(得分:0)
这是工作代码。 问题是在构造函数中将bool值赋值为2 dim数组。
#include <iostream>
#include <cstdlib>
using namespace std;
class genericClassName{
bool genericArray [3][3];
public:
genericClassName()
{
int i, j;
for( i=0;i<3;i++)
for(j=0;j<3;j++)
genericArray[i][i] = false;
}
bool getterFunction (int row, int column)
{
return genericArray[row][column];
}
};
int
main(void)
{
genericClassName objectName;
cout << objectName.getterFunction (1, 1) << endl;
return 0;
}