这是我为一个类编写的程序的开始,我试图让它读取包含许多浮点数的文件。使用双打应该不是问题。我假设使用 array1.readDataFromFile(( 调用我的函数; 将访问 array1 结构中动态创建的数组?然而,当
这是头文件
// 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
这是我的主要
//main .cpp file
#include <iostream>
#include "NumberArrayClass.h"
using namespace std;
int main()
{
//creating our class object.
NumberArrayClass array1;
array1.readDataFromFile();
array1.displayArray();
system("pause");
return 0;
}
我不确定如果我的语法错误还是什么..文件打开,但array1.displayArray((吐出垃圾。
检查此行:
while (... && inFile >> numberArray[countIt]);
operator>>
不会返回操作的成功,而是返回与其操作相同的ifstream
(因此您可以进行链式调用(:
拆分条件和分配,并在分配后检查 eofbit 以了解您是否到达了文件的末尾。您可能还想查看badbit
和failbit
。
关于您的标题问题Is there a limit on accessing dynamically allocated arrays through class functions in C++?
:您的 SO 和硬件规定了一个实际限制,但如果这不是这里发生的事情。如果您遇到此类问题,它将在以下行中:
numberArray = new double[arraySize];
(旁注,如果你决定从这个类派生,你的析构函数应该是virtual
的(
我在这里看到了一个问题。 假设浮点数/双精度数小于arraySize
。这意味着 while 循环将在countIt
到达arraySize
之前终止。 但是,您的显示函数循环遍历数组的整个arraySize
元素。 由于数组在分配后未初始化,这意味着这些元素包含垃圾。
我的建议是执行以下操作:
- 分配后初始化数组。
- 仅显示读取函数读取的多个元素。