我有一個指向對象的指針向量。每個對象都存儲一個值並具有一個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();
}
最後編輯:好吧,這個問題原來是這是未能正確初始化一個指針borked構造,所以我WAY上在關閉基地問題實際上是。 :)
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);
}
我覺得這個代碼將不能編譯,更不用說給一個訪問衝突。除非你寫了'int * Integer :: operator - >()'某地 –