当我尝试调试代码时,它会遇到调试错误“c ++ Expression:string subscript out of range” 很确定在调用setCode()时遇到了问题。 如何修复setCode()中的代码?
#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
#include <list>
using namespace std;
class test
{
private:
string code;
int digit;
public:
//constructor
test(): code(""), digit(0) { }
//copy constructor
test(const test &other):
digit(other.digit)
{
for(unsigned int i=0; i < code.length(); i++)
code[digit] = other.code[digit];
}
//set up the private values
void setCode(const string &temp, const int num);
void setDigit(const int &num);
//return the value of the pointer character
const string &getCode() const;
const unsigned int getDigit() const;
};
const string& test::getCode() const
{
return code;
}
const unsigned int test::getDigit() const
{
return digit;
}
void test::setCode(const string &temp, int num)
{
code[num] = temp[num];
}
void test::setDigit(const int &num)
{
digit = num;
}
int main()
{
string contents = "dfskr-123";
test aisbn;
list<test> simul;
list<test>::iterator testitr;
testitr = simul.begin();
int count = 0;
cout << contents << '\n';
aisbn.setCode(contents, count);
aisbn.setDigit(count);
simul.push_back(aisbn);
count++;
/*for(; testitr !=simul.end(); simul++)
{
cout << testitr->getCode() << "\n";
}*/
}
答案 0 :(得分:2)
当您创建test
类的实例时,其中的字符串为空。这意味着每当你这样做时, code[something]
你将超出范围。索引是什么并不重要。
您需要从一开始就将字符串设置为特定长度,并确保索引在该范围内。或者通过在需要时动态扩展字符串来确保索引在范围内。
答案 1 :(得分:1)
您必须确保执行此语句时:
code[num] = temp[num];
code
和temp
的尺寸至少为num + 1
。