我有一个二维数组,它是一个类的数据成员。 我将其初始化为false
.
它位于自己的 .cpp 类文件中。
格式为:
//constructor
genericClassName::genericClassName(bool)
{
bool genericArray [3][3] =
{
{ false, false, false },
{ false, false, false },
{ false, false, false },
};
从我的主要方法中,我使用了以下格式的 getter 函数:
//creation of an object of the class
genericClassName objectName;
//console output
std::cout << objectName.getterFunction (1, 1) << std::endl;
()
中的数字是传递给getterFunction
的参数,用于表示 2d 数组的下标。 按该顺序排列的行和列。
类.cpp文件中的 getterFunction 定义采用以下格式:
bool genericClassName::getterFunction (int row, int column)
{
return genericArray[row][column];
}
函数未返回0
。 相反,我得到一个三位数的数字。 我不确定函数调用是否错误,数组的初始化是否错误,或者 getter 的定义是否错误。 定义是否创建一个本地数组,该数组不是初始化为 false 的数组?
获取器是公开的。 阵列是私有的。
你主要有两个问题:
问题 - 1:您在构造函数中声明了一个数组,这使得不初始化您的类成员。因此,当您使用getterFunction()
时,您正在访问未初始化的数组元素,该元素会给出一些垃圾值。
问题 - 2:您在这里提到了一个参数化构造函数,
//constructor
genericClassName::genericClassName(bool)
{ .... } ^^^^^^
并在不传递参数的情况下创建了实例
//creation of an object of the class
genericClassName objectName; // this need a default constructor
^^^^^^^^^^^^
如果这是您的所有代码,我认为不会因为您没有在代码中定义任何default constructor
而编译代码。
非通用的修复方法如下:看这里
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;
}
这是工作代码。 问题在于在构造函数中将布尔值分配给 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;
}