合并排序实现中的“预期声明”

时间:2015-11-14 03:52:08

标签: c++ visual-studio

我正在完成一个合并排序函数,但我得到两个“预期的声明错误”。他们的位置标有'〜'。我已经解决了,但我无法弄清问题是什么,我认为需要新鲜的眼睛。

template <typename Comparable>
void merge(vector<Comparable> & a, int p, int q, int r)
{
std::vector<Comparable> tmp;

int y = p;
int first = p;
int sec = q + 1;

while ((first <= q) && (sec <= r)) {
    if (a[first] <= a[sec]) {
        tmp[i] = a[first];
        first++;
    }
    else {
        tmp[i] = a[sec];
        sec++;
    }
    y++;
}
if (first > q) {
    for (int x = sec; x <= end; x++) {
        tmp[i] = a[x];
        y++;
    }~
}
else {
    for (x = first; x <= q; x++) {
        tmp[i] = a[x];
        y++;
    }
}

a = tmp;
}~

1 个答案:

答案 0 :(得分:0)

你的for循环存在一些问题。在for循环中声明的变量x的范围具有for循环的局部范围,但是您尝试在第二个for循环中使用它。如果要重新使用它,则必须在for循环之外声明它。此外,iend未在任何地方声明。

int x = 0; // declare x outside so both loops can use it
int end = 0; // assign it whatever you need it to be
int i = 0; // assign it whatever you need it to be

for (x = sec; x <= end; x++) {
    tmp[i] = a[x];
    y++;
}

for (x = first; x <= q; x++) {
    tmp[i] = a[x];
    y++;
}

您可能希望在我之前声明,因为代码的第一部分也使用它。

如果您阅读了错误消息,他们通常会告诉您哪些变量是未声明的。