这是原始程序,我似乎找不到导致它无法编译的程序:
#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'
答案 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)
逗号表达式的第二个操作数必须是表达式。声明不是表达式(赋值将是,但初始化不是赋值)。