为什么不使用引用地址指针在C ++编译上工作?

时间:2011-04-30 06:36:14

标签: c++ macos

我是一名计算机科学专业的学生,​​并参加了我的第一个C ++课程。我在理解我的代码发生了什么问题时遇到了问题:

// This program uses the address of each element in the array. 
#include <iostream>
using namespace std;

int main()
{
    const int NUM_COINS = 5;
    int coins[NUM_COINS] = {5, 1, 25, 5, 10};
    int *p1;        // Pointer to a double.
    int count;                      // Counter variable. 

    // Use the pointer to display the values in the array. 
    cout << "Here are the values in the coins array: \n";
    for(count = 0; count << NUM_COINS; count++)
    {
        // Get the address of an array element
        p1 = &coins[count];

        // Display the contents of the element
        cout << *p1;
    }
    cout << endl;
    return 0;
}
  1. 所以我的第一个问题是为什么不编译呢?我的任何其他简单程序都没有任何问题。我在OS X 4.2.1上使用g ++。我必须键入g ++ -o命令才能编译,如果不是......我会收到这些错误:
  2.   

    g ++ -c -o 9-8.o 9-8.cpp cc 9-8.o   -o 9-8未定义的符号:“std :: basic_ostream&gt;&amp;   的std ::运营商LT;&LT;   

         
        

    (std :: basic_ostream&gt;&amp;,char     const *)“,引自:           _main在9-8.o           _main in 9-8.o“std :: ios_base :: Init :: Init()”,     引自:           9-8.o中的__static_initialization_and_destruction_0(int,int)     “的std :: basic_string的,     std :: allocator&gt; :: size()const“,     引自:           std :: __ verify_grouping(char const *,unsigned long,     的std :: basic_string的,     std :: allocator&gt; const&amp;)在9-8.o     “的std :: basic_string的,     的std ::分配器     :: operator [](unsigned long)const“,引自:           std :: __ verify_grouping(char const *,unsigned long,     的std :: basic_string的,     std :: allocator&gt; const&amp;)在9-8.o           std :: __ verify_grouping(char const *,unsigned long,     的std :: basic_string的,     std :: allocator&gt; const&amp;)在9-8.o           std :: __ verify_grouping(char const *,unsigned long,     的std :: basic_string的,     std :: allocator&gt; const&amp;)在9-8.o     “___gxx_personality_v0”,引用     从:           std :: __ verify_grouping(char const *,unsigned long,     的std :: basic_string的,     std :: allocator&gt; const&amp;)在9-8.o           在9-8.o中___tcf_0           _main在9-8.o           unsigned long const&amp; std :: min(unsigned long     const&amp;,unsigned long const&amp;)in 9-8.o           9-8.o中的__static_initialization_and_destruction_0(int,int)           全球建设者主要关注mainin 9-8.o           CIE in 9-8.o“std :: ios_base :: Init :: ~Init()”,     引自:           ___tcf_0在9-8.o“std :: basic_ostream&gt;&amp;     的std :: ENDL     (std :: basic_ostream&gt;&amp;)“,     引自:           _main in 9-8.o“std :: basic_ostream     :: operator&lt;&lt;(std :: basic_ostream&gt;&amp;     (*)(std :: basic_ostream&gt;&amp;))“,     引自:           _main in 9-8.o“std :: basic_ostream     :: operator&lt;&lt;(int)“,引自:           _main in 9-8.o“std :: cout”,引自:           _main在9-8.o           _main在9-8.o           _main in 9-8.o ld:未找到符号collect2:ld返回1退出     状态:*** [9-8]错误1

      

    这导致了我的第二个问题。即使我输入g ++命令,它也会编译但运行后输出一个空数组。所以我的问题#2是:我的代码是否正确?如何正确使用带有引用地址语句的指针?

2 个答案:

答案 0 :(得分:5)

原因:您没有正确使用比较运算符。将其更改为&#34;&lt;&#34;后,您的代码应该可以正常运行。

for(count = 0; count << NUM_COINS; count++)
                     ^ should be "<" here

答案 1 :(得分:1)

除了for循环中的一个问题外,我没有看到任何问题:

for(count = 0; count << NUM_COINS; count++)
                   //^^

那不是比较。那是左移操作。我相信你不是故意的。

那应该是:count < NUM_COINS