オブジェクトへのポインターのベクトルがあります。各オブジェクトには値が格納され、その値を文字列として返す toString() 関数があります。ベクトルを通過する反復子があり、toString() を呼び出して各オブジェクトの値を抽出する必要があります。問題は、値を取得する方法がわからないことです。
この関数は、最終的には数値をファイルに書き込むことになっていますが、テストのために cout を使用しています。
void writeNumbers(vector<Integer*>& input)
{
ofstream write;
write.open("Integers.txt");
vector<Integer*>::iterator iter = input.begin();
for (iter; iter < input.end(); iter++)
{
**std::cout << (*iter)->toString() << std::endl;**
}
write.close();
I get an Access Violation error which points me to the toString() function:
std::string Integer::toString()
{
std::stringstream ss;
ss << *(this)->value;
return ss.str();
}
toString() works fine whenever I don't try to access it through the iterator.
編集: toString の値は、実際には数値へのポインターです。
Edit2: 新しい writeNumbers:
void writeNumbers(vector<Integer*>& input)
{
ofstream write;
write.open("Integers.txt");
vector<Integer*>::iterator iter = input.begin();
for (iter; iter != input.end(); iter++)
{
std::cout << (*iter)->toString() << std::endl;
}
write.close();
}
最終編集:問題は、ポインターを適切に初期化できなかった壊れたコンストラクターであることが判明したため、問題が実際にどこにあったかについて、私はかなり離れていました。:)
Integer::Integer(string input)
{
if(isNaN(input))
value = new int(atoi(input.c_str()));
}
したがって、!isNaNである必要があり、さらに、不適切な入力で初期化する問題を修正しました。
//New constructor, works 100%
Integer::Integer(string input)
{
if(!isNaN(input))
value = new int(atoi(input.c_str()));
else
value = new int(0);
}