Arrays 通过C+;中的类函数访问动态分配的数组是否有限制+;?
这是我为一个类编写的程序的开始,我试图让它读取一个包含大量浮点的文件。使用替身应该不是问题。我假设使用array1.readDataFromFile()调用我的函数; 是否将访问array1结构中动态创建的数组?但是当 这是头文件Arrays 通过C+;中的类函数访问动态分配的数组是否有限制+;?,arrays,function,class,visual-c++,Arrays,Function,Class,Visual C++,这是我为一个类编写的程序的开始,我试图让它读取一个包含大量浮点的文件。使用替身应该不是问题。我假设使用array1.readDataFromFile()调用我的函数; 是否将访问array1结构中动态创建的数组?但是当 这是头文件 // Specification file for the NuberArrayClass //a.k.a NumberArrayClass.h file #ifndef NUMBERARRAYCLASS_H #define NUMBERARRAYCLASS_H
// Specification file for the NuberArrayClass
//a.k.a NumberArrayClass.h file
#ifndef NUMBERARRAYCLASS_H
#define NUMBERARRAYCLASS_H
using namespace std;
// class declaration
class NumberArrayClass
{
private:
int arraySize;
double * numberArray = nullptr;
public:
//constructor declaration
NumberArrayClass();
//member functions
void readDataFromFile();
void displayArray();
//destructor
~NumberArrayClass()
{
delete[] numberArray;
} // end of destructor
};
#endif // NUMBERARRAYCLASS_H
下面是类函数文件
//NumberArrayClass.cpp file
#include "NumberArrayClass.h" //needed to access arry
#include <iostream>
#include <fstream> //needed for file read
using namespace std;
NumberArrayClass::NumberArrayClass()
{
arraySize = 250;
numberArray = new double[arraySize];
}
void NumberArrayClass::readDataFromFile()
{
//creating a read object and opening file.
ifstream inFile;
inFile.open("DoubleData.txt");
int countIt = 0; //this is a counter
if (!inFile.fail())
{
cout << "File open!" << endl;
//this should populate the
while (countIt < arraySize && inFile >> numberArray[countIt]);
{
countIt++; //incramenting counter.
}
}
else
{
cout << "File Read fail!" << endl;
}//end of if/else statement.
}//end of readDataFromFile
void NumberArrayClass::displayArray()
{
for (int i = 0; i < arraySize; i++)
{
cout << numberArray[i] << endl;
}
}//end of displayArray
//numberrayClass.cpp文件
#包括访问arry所需的“numberrayClass.h”//
#包括
#包括//文件读取所需
使用名称空间std;
NumberRayClass::NumberRayClass()
{
阵列化=250;
numberArray=新的双精度[arraySize];
}
void numberrayclass::readDataFromFile()
{
//创建读取对象并打开文件。
河流充填;
infle.open(“DoubleData.txt”);
int countIt=0;//这是一个计数器
如果(!infle.fail())
{
cout numberArray[countIt]);
{
countIt++;//参数化计数器。
}
}
其他的
{
我看这里有个问题。
假设浮点/双精度浮点数小于arraySize
。这意味着while循环将在countIt
达到arraySize
之前终止。
但是,显示函数在整个arraySize
数组元素中循环。
由于数组在分配后没有初始化,这意味着这些元素包含垃圾
我的建议如下:
分配后初始化数组
仅显示read函数读取的多个元素
选中此行:
while (... && inFile >> numberArray[countIt]);
numberArray = new double[arraySize];
操作符>>
不会返回操作成功的消息(因此您可以链接调用):
拆分条件和分配,分配后检查是否到达文件末尾。您可能还需要查看badbit
和failbit
关于标题问题>代码>是否有限制通过C++中的类函数访问动态分配的数组?<代码>:有一个实际限制,由你的SO和硬件来指定,但是如果这不是这里发生的事情。如果你遇到这样的问题,它将在这一行:
while (... && inFile >> numberArray[countIt]);
numberArray = new double[arraySize];
(请注意,如果您决定从此类派生,则析构函数应该是virtual
)检查:但是当.code>#2正确时,您应该只显示您知道有效的数据。但是我建议不要显示#1,因为它是不必要的,如果您不打算触摸未初始化的值,那么在数组中保留这些值没有什么错(也就是说,执行#2!)。这是正确的,看看我遇到的问题是如何读取而不是数组。需要弄清楚如何从由“\n”分隔的浮点列表中读取。它们由空格分隔,但我的生成只将最后一个浮点加载到数组的第一个元素中。我通过为数组。我得到列表中的最后一个浮点数和一堆零。谢谢你的输入!