QVector
-
I wrote some code at work today, and got a QVector error when I tried to run the code. I was going to ask someone at work. Then I wrote some totally different code at home, and I got a QVector error (not 100% sure it's the same error). Anyone know what's going on? I'm using Qt 4.5 at work and 4.7.3 at home. I can post code, if need be.
-
from reader.h:
@
{
class Reader
{
protected:
int readFile();public: Reader(const QString &filename;) { _filename = filename; if (readFile()) { _filename = ""; } }; virtual ~Reader() { }; virtual bool isValid(); int getStages() { readFile(); return _stages; }; QVector<double> getWetMasses() { readFile(); return _wMasses; };
QVector<double> getFuelMasses()
{
readFile();
return _fMasses;
};QVector<double> getDryMasses()
{
readFile();
return _dMasses;
};QVector<double> getFlowRates()
{
readFile();
return _flowRates;
};QVector<double> getBurnTimes()
{
readFile();
return _burnTimes;
};QVector<double> getThrusts()
{
readFile();
return _thrusts;
};QVector<double> getAlphas()
{
readFile();
return _alphas;
};double getRVMass()
{
readFile();
return _RVMass;
};double getRVAlpha()
{
readFile();
return _RVAlpha;
};QString filename() { return _filename; }; private: QString _filename; int _stages; QVector<double> _wMasses;
QVector<double> _fMasses;
QVector<double> _dMasses;
QVector<double> _flowRates;
QVector<double> _burnTimes;
QVector<double> _thrusts;
QVector<double> _alphas;
double _RVMass;
double _RVAlpha;
};
}@from reader.cpp:
@{
int ret = 0;if (_filename.isEmpty())
{
return 1;
}// create QFile, and open and initialize QTextStream
QFile infile(_filename);
if (!(infile.open(QIODevice::ReadOnly)))
{
return 1;
}QTextStream its(&infile;);
// parse header
bool dataRow = false;QString line;
while (!dataRow && !its.atEnd())
{
line = its.readLine();if (line.contains(QRegExp("\\d+\\.?\\d*"))) // check for data row { dataRow = true; }
} //should have first row of data
_stages = line.toInt();
//read rest of file
while (!its.atEnd())
{
int i = 0;
while(i < _stages)
{
line = its.readLine();
_wMasses.push_back(line.toDouble());line = its.readLine();
_fMasses.push_back(line.toDouble());line = its.readLine();
_dMasses.push_back(line.toDouble());line = its.readLine();
_flowRates.push_back(line.toDouble());line = its.readLine();
_burnTimes.push_back(line.toDouble());line = its.readLine();
_thrusts.push_back(line.toDouble());line = its.readLine();
_alphas.push_back(line.toDouble());i++;
}line = its.readLine();
_RVMass = line.toDouble();line = its.readLine();
_RVAlpha = line.toDouble();
}return ret;
}@That's the code that I'm pretty sure it crashes on. In main.cpp I initialize the variables (as ints, or doubles, or QVector<double>s, but I'm adding stuff to the variables in the reader.cpp. The work code is the same, just with different variables.
Thanks for any help.
Edit : @ added by Eddy. Please use the code button on top of this edit field to make code more readable for others
-
Well, now it doesn't crash. I didn't change any code from when I posted the initial post last night, so there's no reason for it to be working, now. But it does. Sort of. I'm now having a problem with QFile:
QFile infile(_filename) where _filename = test.dat (an ASCII text file).
infile shows up as {...} when I step through the code, so my input file never actually gets read. Anyone have an idea as to why? Or should I just wait 12 hours for VS2010/Qt to magically work for me...
-
-
Please disregard the additional problem from my last post. I'm actually having a problem with
QTextStream its(&infile;);
infile is loading the name of the input file, but QTextStream its isn't actually reading the file. I go on to do:
line = its.readLine(), but line always shows up as "" (even though the first line of the file is a 2).
Anyone able to help, I would appreciate it. Thanks in advance.
-
CODE:
QFile infile(_filename);
/* if (!(infile.open(QIODevice::ReadOnly)))
{
return 1;
}*/QTextStream its(&infile;);
// parse header
bool dataRow = false;QString line;
while (!dataRow && !its.atEnd())
{
line = its.readLine();if (line.contains(QRegExp("\\d+\\.?\\d*"))) // check for data row { dataRow = true; }
} //should have first row of data
_stages = line.toInt();
-
Please use the code tag (button on the right with <> symbol on it)
"Forum help":http://developer.qt.nokia.com/wiki/ForumHelp -
@ QFile infile(_filename);
/* if (!(infile.open(QIODevice::ReadOnly)))
{
return 1;
}*/QTextStream its(&infile;);
// parse header
bool dataRow = false;QString line;
while (!dataRow && !its.atEnd())
{
line = its.readLine();if (line.contains(QRegExp("\\d+\\.?\\d*"))) // check for data row { dataRow = true; }
} //should have first row of data
_stages = line.toInt();@
Sorry, I didn't notice it didn't post correctly.
-
QFile inherits "open":http://doc.qt.nokia.com/4.7-snapshot/qiodevice.html#open from QIODevice. You want
@
infile.open(QIODevice::ReadOnly);
@ -
@
QFile infile(_filename);infile.open(QIODevice::ReadOnly);
QTextStream its(&infile;);
// parse header
bool dataRow = false;QString line;
while (!dataRow && !its.atEnd())
{
line = its.readLine();if (line.contains(QRegExp("\\d+\\.?\\d*"))) // check for data row { dataRow = true; }
} //should have first row of data
_stages = line.toInt();@
I get into the while loop and it seems to think its is empty, so really I'm thinking it's still an issue with QTextStream. Let me know if you need anything else.