我需要调整数组的大小并将值复制到那里......所以我知道,我需要一个动态数组,但我不能使用vector
并且必须使用静态数组..我写了类似的东西这样:
string names1[0];
bool foo(const char * inFile1) {
int size = 0;
ifstream myfile(inFile1);
if (myfile.is_open()) {
// iterate through lines
while (getline(myfile, line)) {
string tmp[++size];
for (int i=0; i!=size;i++)
tmp[i]=names1[i];
names1=tmp;
names1[size]=line;
}
}
}
然而,在names1=tmp;
行上我得到了
main.cpp:42:20: error: incompatible types in assignment of ‘std::string [(((unsigned int)(((int)(++ size)) + -0x000000001)) + 1)]’ to ‘std::string [0]’
...我是C ++的新手,作为一个javaguy,我真的很困惑:-S感谢任何建议,如何解决这个问题..
答案 0 :(得分:2)
变量names1
是一个包含零个条目的数组(本身就存在问题),并且您尝试将该变量分配为单个字符串。这不会起作用,因为字符串数组不等于字符串。
首先,我建议您使用std::vector
而不是零大小的数组。
要继续,您不需要逐个字符复制到临时变量中,只需将读取字符串添加到矢量中:
std::vector<std::string> names1;
// ...
while (std::getline(myfile, line))
names1.push_back(line);
如果您无法使用std::vector
,则必须使用 more 而不是零条目分配正确的数组。如果你超过了那个,那么你必须重新分配它以增加数组的大小。
类似的东西:
size_t current_size = 1;
std::string* names1 = new std::string[current_size];
size_t line_counter = 0;
std::string line;
while (std::getline(myfile, line))
{
if (line_counter > current_size)
{
std::string* new_names1 = new std::string[current_size * 2];
std::copy(names1, names1 + current_size, new_names1);
delete[] names1;
names1 = new_names1;
current_size *= 2;
}
else
{
names1[line_counter++] = line;
}
}