сообщение об ошибке при использовании указателей c ++

0
#import <iostream>
using namespace std;
main()
{
int andy = "25";
int andy1 = * andy;
int andyand = & andy;
cout <<"hello"<<endl<<andy<<endl<<andy1<<andyand;
};

Я только начинаю использовать указатели в c++, и я не могу понять, почему я получаю следующее: ошибка: неверное преобразование из 'const char *' в 'int' error: недопустимый аргумент типа unary '' (have 'int ") | и ошибка: неверное преобразование из 'int' в 'int'

  • 1
    Что такое импорт?
  • 0
    «кавычки» указывают строки или массивы символов, а не целые числа.
Показать ещё 1 комментарий
Теги:
pointers

4 ответа

4

Во-первых, в C++ вы не должны использовать "необработанные" указатели.

Теперь о вашей проблеме: в сообщении об ошибке говорится: "Неверное преобразование из const char * в int".

int andy = "25";

"25" - строковый литерал (с типом const char*). Вместо этого вы хотите вместо него целочисленную константу:

int andy = 25;

Теперь - andy не является указателем, поэтому вы не можете применить * operator - и это является причиной вашей второй ошибки (invalid type argument of unary '*').

Наконец, прочитайте книгу или учебник по этим вопросам, поскольку вы не используете указатели в любом месте вашего кода, вы просто слепо пользуетесь операторами & и *.

Это может быть пример использования указателей:

int andy = 25;
int *andy1 = &andy;  // andy1 is the pointer - see star after type declaration
                     // with &andy we're assigning the address of andy variable to it

int andyand = *andy1; // star before pointer is dereferencing - reads the value of the memory
                     // address where pointer is pointing to. So, *andy1 evaluates to 25
cout << "hello" << endl << andy << endl << *andy1 << andyand;

О, все отметили это, кроме меня - к сожалению (для вас и для нас) нет директивы по import в C++, но она должна быть с нами через несколько лет.

  • 1
    +1 за небольшой учебник для начинающих
1

Директивы #import в C++ нет. Я думаю, вы имеете в виду

#include <iostream>

Функция main должна иметь тип возврата int.

Интегральные литералы указаны без кавычек. Поэтому вместо

int andy = "25";

следует написать

int andy = 25;

Также эти утверждения

int andy1 = * andy;
int andyand = & andy;

недействительны. Неясно, что вы пытаетесь определить.

1

Здесь у вас много недопустимого синтаксиса:

#import <iostream> // WRONG!
using namespace std;
main()
{
    int andy = "25"; // Not good
    int andy1 = * andy; // not good
    int andyand = & andy; // not good
    cout <<"hello"<<endl<<andy<<endl<<andy1<<andyand;
}

То, что вам нужно, это:

#include <iostream> 
using namespace std;
main()
{
    int andy = 25; // 25 is an int, "25" is a char*
    //int andy1 = *andy; // andy is not a pointer, so you cannot dereference it
    int* andyand = &andy; // andyand now points to andy
    cout <<"hello"<<endl<<andy<<endl<<*andyand;
}

Будет распечатываться

hello
[value of andy]
[value of andy]
1

Просто пиши:

using namespace std;
main()
{
int andy = 25; // no quotation marks
int* andy1 = &andy; // use "&" to take the addrees of andy for your pointer
int* andyand = & andy;
cout <<"hello"<<endl<<andy<<endl<<andy1<<endl<<andyand;
};

Нет необходимости использовать кавычки с целочисленной переменной.

  • 0
    Строка int andy1 = * andy; будет по-прежнему вызывать ошибку и, следовательно, строку после этого, а также
  • 0
    да, не заметил этого, я был сосредоточен на кавычках, спасибо :-)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню