2015-12-20 23 views
1

我的名字是亚当,我刚刚开始学习C++,我喜欢它,但是我仅仅在第七版sams上的第181页上教导你自己每天在一小时内使用C++,而在第七版C++中为第102页假人。我有七本关于三本书的多页笔记,以及二十一本关于傻瓜书的多页笔记。请帮助我了解为什么我的简单程序会出现5个错误,并且很快会显示。我不想使用-fmissmissive选项,因为我不是很有经验,所以我需要学习如何正确编写代码。非常感谢大家,非常非常喜欢C++,甚至对于一个简单的程序我有一个很好的主意,我打算学习如何编写,这可以让程序开发时间或写入时间减少5-20倍一般。下面显示的程序不是这个程序,但请帮助我,这样我可能有一天会写,并将我的程序想法用于大学论文。再次感谢您,问题的方案如下:,我的简单程序有什么问题?

  #include <iostream> 
      using namespace std; 

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

     int* pNumbers = new int [InputNums]; 
     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; 

      delete[] pNumbers; 
      cout<< "press enter to continue..." << endl; 
      cin.ignore(10, '\n'); 
      cin.get(); 

      return 0; 
    } 

问题表示为在第二个for循环的多个初始化之中。请告诉我为什么我的问题程序无法编译。谢谢你们。真诚的亚当。

+2

'for(int Index = 0,* pCopy = pNumbers; ...'。这会让你通过编译器错误 –

+0

这是newmanadam的发言,我非常感谢你的所有意见和帮助。伊戈尔Tandetnik 4,非常快速的反应,和简洁的解决方案。现在,它是我的信念,我的书-S正试图阐述的基本原则,并可能有一些过时的技术,以证明别人开始。谢谢大家非常。 – newmanadam

+0

O,我很抱歉,伊戈尔Tandetnik您的名字后面加上一个4,我现在可以看到,这4表示4小时前,我承认有点醉了。对不起 – newmanadam

回答

2

我的第一个建议是find a better book

一旦你这样做了,忘记了你所知道的关于使用new分配数组(例如,int* pNumbers = new int [InputNums];)的所有信息。这是一个过时的构造,你不应该使用(永远)。

如果我不得不写一个程序做你上面所列出的东西,它的核心将是这个样子:

cout<< "how many integers do you wish to enter? "; 
int InputNums; 
cin>> InputNums; 

std::vector<int> numbers; 

int temp; 
for (int i=0; i<InputNums; i++) { 
    cin >> temp; 
    numbers.push_back(temp); 
} 

cout<< "displaying all numbers input:\n"; 

for (auto i : numbers) 
    cout << i << " "; 
-2

直接回答你的问题:你不能在初始化不同类型的变量相同的循环声明。

在您的例子:

for(int Index = 0, int* pCopy = pNumbers; 

INTINT *有不同的类型。即使您使用自动让编译器自动扣除类型,两个变量都不能有不同的扣除类型。

解决办法:

int Index = 0; 
for(int *pCopy=pNumbers; ... 

有了这个单一的辅助效果:指数现在不仅局限于范围。如果这是一个问题,你可以这样做:

{ 
    int Index = 0; 
    for(int *pCopy=pNumbers; ... 
    ... 
} 

现在索引的范围仅限于周围的花括号。

+2

'你不能在同一个for循环初始化不同类型的变量宣言“假。'for(int Index = 0,* pCopy = pNumbers; ...)'工作,并声明'int'类型的'Index'和'int *'类型的'pCopy'。 –

相关问题