指针程序不工作但语法应该是正确的?为什么不编译?

时间:2015-07-20 20:26:09

标签: c++

这是原始程序,我似乎找不到导致它无法编译的程序:

#include <iostream>

using namespace std;

int main(){
    cout << "How many integers you wish to enter? ";
    int InputNums = 0;
    cin >> InputNums;

    int* pNumbers = new int [InputNums]; // Allocate request integers.
    int* pCopy = pNumbers;

    cout << "Successfully allocated memory for: " << InputNums << " integers." << endl;
    for (int Index = 0; Index < InputNums ; ++ Index){
        cout << "Enter number: " << Index << ": ";
        cin >> *(pNumbers + Index);
    }

    cout << "Displaying all numbers input: " << endl;
    for(int Index = 0, int* pCopy = pNumbers; Index < InputNums; ++Index)
        cout << *(pCopy++) << " ";

        cout << endl;

        // Done w/using pointers? Release memory.
        delete[] pNumbers;

        return 0;
}

为什么这不起作用的任何想法?我看了,试图插入一些';'无济于事。所以我以原始形式重新制作它们,但任何想法都会受到赞赏!

这些是错误:

main.cpp:20:24: error: expected unqualified-id before 'int'
main.cpp:20:24: error: expected ';' before 'int'

3 个答案:

答案 0 :(得分:3)

您的编译器会告诉您错误的位置:

for(int Index = 0, int* pCopy = pNumbers; Index < InputNums; ++Index)

没有意义。问题出在for循环的第一部分:

int Index = 0, int* pCopy = pNumbers;

编译器期望在声明变量之后,语句结束,第二个声明在新语句中(尽管存在另一个选项,我们将在后面看到):

int Index = 0; int* pCopy = pNumbers;
然而,

这会打破for,因为它需要一个(简单)语句和两个表达式。 It can be fixed撰写

int Index = 0, *pCopy = pNumbers;

这是您之前可能已经看过的内容的变体:

int a, b;

添加了一些更多的复杂性 - 主要是初始化以及*实际上不属于该类型的事实,而是变量(这是奇怪的和错误的重要来源)。

当然所有这些都不是必需的,因为你已经拥有一个pCopy来保持完全正确的价值......

答案 1 :(得分:3)

您不能在一个声明语句中声明两种不同类型的变量。可以把它想象成在正常声明中尝试做同样的事情:

    int a = 1, double b = 1.0;

显然违反了C ++语法。在for循环声明中也是一样。

你可以试试这个:

    for(int Index = 0, *pCopy = pNumbers; Index < InputNums; ++Index)

编译,但我个人觉得有点不确定。我认为简单地将pCopy声明移到for循环之外会有更好的风格。

答案 2 :(得分:1)

逗号表达式的第二个操作数必须是表达式。声明不是表达式(赋值将是,但初始化不是赋值)。