#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'
Во-первых, в 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++, но она должна быть с нами через несколько лет.
Директивы #import в C++ нет. Я думаю, вы имеете в виду
#include <iostream>
Функция main должна иметь тип возврата int.
Интегральные литералы указаны без кавычек. Поэтому вместо
int andy = "25";
следует написать
int andy = 25;
Также эти утверждения
int andy1 = * andy;
int andyand = & andy;
недействительны. Неясно, что вы пытаетесь определить.
Здесь у вас много недопустимого синтаксиса:
#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]
Просто пиши:
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;
};
Нет необходимости использовать кавычки с целочисленной переменной.