Почему не работает на C ++ компиляции с указателем адреса ссылки? - PullRequest
1 голос
/ 30 апреля 2011

Я студент информатики и беру свой первый класс 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. Итак, мой первый вопрос: почему он не компилируется? У меня нет проблем вообще ни с одной из моих других простых программ. Я использую g ++ на OS X 4.2.1. Я должен набрать команду g ++ -o для его компиляции, если нет ... я получаю эти ошибки:

g ++ -c -o 9-8.o 9-8.cpp cc 9-8.o -o 9-8 Неопределенные символы: "std :: basic_ostream> & станд :: оператор << </p>

(std :: basic_ostream> &, char const *) ", ссылка на которую указана от: _main в 9-8.o _main в 9-8.o "std :: ios_base :: Init :: Init ()", ссылка от: __static_initialization_and_destruction_0 (int, int) в 9-8.o
«Станд :: basic_string, std :: allocator> :: size () const ", ссылка от: std :: __ verify_grouping (char const *, unsigned long, станд :: basic_string, std :: allocator> const &) в 9-8.o «Станд :: basic_string, станд :: распределитель :: operator [] (unsigned long) const ", ссылка из: std :: __ verify_grouping (char const *, unsigned long, станд :: basic_string, std :: allocator> const &) в 9-8.o std :: __ verify_grouping (char const *, unsigned long, станд :: basic_string, std :: allocator> const &) в 9-8.o std :: __ verify_grouping (char const *, unsigned long, станд :: basic_string, std :: allocator> const &) в 9-8.o "___gxx_personality_v0", ссылка от: std :: __ verify_grouping (char const *, unsigned long, станд :: basic_string, std :: allocator> const &) в 9-8.o ___tcf_0 в 9-8.o _main в 9-8.o длинное без знака const & std :: min (длинное без знака const &, unsigned long const &) в 9-8.o __static_initialization_and_destruction_0 (int, int) в 9-8.o глобальные конструкторы подключены к mainin 9-8.o CIE в 9-8.o "std :: ios_base :: Init :: ~ Init ()", ссылка от: ___tcf_0 в 9-8.o "std :: basic_ostream> & станд :: епсИ (std :: basic_ostream> &) ", ссылка от: _main in 9-8.o "std :: basic_ostream :: operator << (std :: basic_ostream> & (*) (std :: basic_ostream> &)) ", ссылка от: _main in 9-8.o "std :: basic_ostream :: operator << (int) ", на который ссылаются из: _main в 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 </p>

, что приводит ко второму вопросу. Даже если я наберу команду g ++, она компилируется, но после запуска выдает пустой массив. Итак, мой вопрос № 2: мой код правильный? Как правильно использовать указатели со справочным адресом?

Ответы [ 2 ]

5 голосов
/ 30 апреля 2011

Причина : Вы неправильно используете оператор сравнения. После изменения его на «<» ваш код должен работать правильно. </p>

for(count = 0; count << NUM_COINS; count++)
                     ^ should be "<" here
1 голос
/ 30 апреля 2011

Я не вижу никаких проблем, кроме одной проблемы в вашем for цикле:

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

Это не сравнение. Это операция левого сдвига. Я уверен, что ты не хотел этого.

Это должно быть: count < NUM_COINS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...