значение типа int нельзя присвоить сущности типа int

Ошибка компиляции Malloc: значение типа » int » нельзя использовать для инициализации сущности типа int (*)[30]

Я, должно быть, уже пробовал 20 способов сделать это. Мне действительно нужна помощь, независимо от того, что я делаю, я получаю ошибку, подобную этой.

т. е. это приведет меня к такой ошибке

и делать что-то вроде этого

у кого-нибудь есть решение для того, как успешно выделить 2dArray int[160][10]

6 ответов

оба они компилируются отлично для меня. Первая ошибка распространена, когда вы забываете #include до использования функций, объявленных в пределах said-same (например, malloc(size_t) ), что я и сделал не забудьте сделать.

C имеет некоторые интересные поведения во время компиляции, среди них способность вызывать функцию, которая никогда не была замечена раньше (ни определение прототипа , ни реализации). При встрече с таким вызовом C принимает функция:

например., неявно предполагается, что функция имеет вид:

часто вы даже не заметите, за исключением предупреждений от вашего компилятора, которые сообщают что-то о:

и если вы на-мяч, у вас есть уровни предупреждения появились с включенными предупреждениями-как-ошибки и поймают это.

ну, компилятор должен блевать, говоря вам, что int и char* не совместимы (вскоре после того, как он предупреждает вас get_str предполагается вернуть int ). Но что, если вы заставите компилятор вручную говорит сделать char* так или иначе:

Итак, как все это относится к вашему коду? Не включая компилятор не знает, что malloc есть. Поэтому он предполагает, что это формы:

затем, бросив результат в (int**) вы говорите компилятору: «что бы из этого ни вышло, сделайте это int** «. В момент соединения, _malloc найдено (нет сигнатуры параметра через имя, например, C++), подключено, и ваша программа готова к вечеринке. Но на вашей платформе!—7—> и указатели данных не тот же размер, таким образом, вы в конечном итоге с несколькими нежелательными последствиями:

Итак, вы строите это на своем 32-битном Debian box, все выглядит хорошо. Вы сдаете домашнее задание профессору, который строит его на своем 64-битном Mac, и он падает, вы проваливаете задание, проваливаете класс, бросаете колледж и проводите следующие десять лет, гладя кошку, наблюдая повторы Сайнфелда в подвале вашей мамы, удивляясь, что пошло не так. Ай.

Читайте также:  нельзя судить людей по национальности

не относитесь к литью, как к какой-то серебряной пуле. Это не так. В C, это необходимо далеко реже, чем люди используют его, и если используется в неправильном месте, может скрыть катастрофические ошибки. Если вы найдете точку в своем коде, где что-то не будет компилироваться без жесткого приведения, посмотрите еще раз. Если вы не абсолютно, положительно уверены, что бросок-это правильная вещь, шансы его неправильно.

в этом случае он скрыл реальную ошибку, что вы забыли дать достаточно информации вашему компилятору, чтобы знать, что malloc действительно делает.

Источник

Вспомним синтаксис C++ или помогите с присвоением значения переменной

typedef BOOL(FAR *GetDeviceListFuncType) (LPVOID*, int*, LPVOID*, int);

BOOL(FAR* Proba);
LPVOID* aaa1, aaa2;
int* bbb1;
int bbb2;
Proba = GetDeviceListFuncType(aaa1, bbb1, aaa2, bbb2);

IntelliSense: значение типа «GetDeviceListFuncType» нельзя присвоить сущности типа «BOOL *»

Что сделано неправильно?

typedef BOOL (FAR *GetDeviceListFuncType) (LPVOID*, int*, LPVOID*, int);
HMODULE hLib = GetModuleHandle(«MyDll.dll»);
GetDeviceListFuncType GetDeviceList = GetProcAddress(hLib, «GetDeviceListFunc»);
GetDeviceList(a,b,c,d);

IntelliSense: значение типа «FARPROC» нельзя использовать для инициализации сущности типа «GetDeviceListFuncType»

(11) не горит. для себя родного всё.

(13)
HMODULE hLib = GetModuleHandle(«PMDll.dll»);
typedef BOOL (FAR *GetDeviceListFuncType) (LPVOID*, int*, LPVOID*, int);
GetDeviceListFuncType pVar = GetProcAddress(hLib, «GetDeviceListFuncType»);

Получилось вот так
BOOL (FAR *GetDeviceListFuncType) (LPVOID*, int*, LPVOID*, int);
(FARPROC &)GetDeviceListFuncType = GetProcAddress(hLib, «GetDeviceListFuncType»);
BOOL pVar = GetDeviceListFuncType(aaa1, bbb1, aaa2, bbb2);

по примеру из ссылки выше. теперь осталось добить переменные для функции.

ну судя по
LPVOID* aaa1, aaa2;
int* bbb1;
int bbb2;

тебе еще долго ковыряться 🙂

GetDeviceListFuncType GetDeviceList = GetDeviceListFuncType(GetProcAddress(hLib, «GetDeviceListFunc»));
GetDeviceList(a,b,c,d);

GetDeviceListFuncType это тип
GetDeviceList это переменная типа GetDeviceListFuncType

ей присваиваем адрес функции
GetDeviceList = GetDeviceListFuncType(GetProcAddress(hLib, «GetDeviceListFunc»));

BOOL z = GetDeviceList(a,b,c,d);

что должно быть в параметрах, я не знаю.

ну и прежде чем вызывать функцию, проверь, есть она или нет.

if (GetDeviceList == NULL) < ошибка >;

(27) «как перевести в C++ строки из C#? нужен аналог вот этого:
public String strHostname;»

пиши так CString strHostname;
или так char * strHostname;
или так char strHostname[80];

(14) «HMODULE hLib = GetModuleHandle(«PMDll.dll»); «

может стоит так написать

(0) ТС вот тебе пример загрузки длл

Читайте также:  чем погладить шторы не снимая с карниза

HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;

Источник

Из типа char * в тип int *

Из-за невозможности неявного преобразования из типа char * в тип int * в проекте при компиляции происходит ошибка:

. \ProcMem.cpp In file included from ProcMem.cpp
. \ProcMem.h In member function ‘cData ProcMem::Read(DWORD, char*, BOOL)’:
. \ProcMem.h [Error] no matching function for call to ‘ProcMem::iSizeOfArray(char*&)’
. \ProcMem.h [Note] candidate is:
. \ProcMem.cpp In file included from ProcMem.cpp
. \ProcMem.h [Note] int ProcMem::iSizeOfArray(int*)
. \ProcMem.h [Note] no known conversion for argument 1 from ‘char*’ to ‘int*’

Что мне нужно изменить в ProcMem.h?

2 ответа 2

Вы можете использовать приведение типов reinterpret_cast при условии, что значение исходного указателя типа char * соответственно выравнено на границу для типа int.

Но я думаю, что ваш вопрос к вашей проблеме не имеет отношения. Скорей всего вы по недопониманию пытаетесь сделать что-то некорректное либо в проектировании ваших классов, либо в обращении с ними.

Для начала нужно понимать в каком контексте вызывается вот эта функция:

Точней вам может ответить только тот человек, который проектировал весь этот функционал. И/или тот, у которого есть хорошее его понимание плюс полный набор исходников перед глазами.

Источник

Динамический массив C ++: значение типа «void» не может использоваться для инициализации объекта типа & quot; int & quot;

Я работаю над проектом C ++ для школы, в котором программа будет читать список чисел из текстового файла, сохранять их в динамическом массиве, а затем распечатывать в другой текстовый файл. Честно говоря, я немного растерялся с указателями в этом, и я получаю ошибку «Значение типа» void «нельзя использовать для инициализации объекта типа» int «» в моем основном исходном файле.

Main.cpp (здесь я получаю сообщение об ошибке):

dynamic.cpp (каркас для программы):

и dynamic.h, заголовочный файл:

Решение

Вы должны добавить скобки к главной или любой функции:

2- вы используете унифицированный объект:

так что int * theArray является данными члена и неинициализирован, так что добро пожаловать в segfault

все члены da не инициализированы, поэтому вы должны сделать это перед использованием.

3 — также вы добавляете круглые скобки для функции Grow:

Читайте также:  мне без тебя нельзя никак нельзя ты мое главное чудо

4- using namespace std; в заголовочном файле это очень плохая практика.
совет использовать его внутри источника

Другие решения

main это функция, поэтому ей нужны скобки:

А также. Ваш grow также является функцией, поэтому, если вы хотите вызвать ее, напишите grow() и это нужно DynamicArray в качестве параметра.

Нельзя писать рабочие программы на C / C ++ любой язык программирования, не знающий базового синтаксиса.

Источник

Преобразование типов в C++

С++ позволяет нам преобразовывать данные одного типа в данные другого – это известно как преобразование типов.

В C++ существует два типа преобразования:

Неявное преобразование типов

Преобразование типа, которое автоматически выполняется компилятором, известно как неявное преобразование. Этот тип также известен, как автоматическое преобразование.

Давайте посмотрим на два примера неявного преобразования типов.

Пример 1: из int в double

В программе мы присвоили данные типа int переменной типа double.

Пример 2: из double в int

В программе мы присвоили данные типа double переменной типа int.

Примечание. Поскольку int не может иметь десятичную часть, цифры после десятичной точки в приведенном выше примере усекаются.

Потеря данных (сужение преобразования)

Как мы видели из приведенного выше примера, преобразование из одного типа данных C++ в другой в С++ подвержено потере данных. Это происходит, когда данные большего типа преобразуются в данные меньшего типа.

Явное преобразование

Когда пользователь в C++ вручную меняет данные с одного типа на другой, это называется явным преобразованием. Этот тип преобразования также известен, как приведение типов.

Есть три основных способа использования явного преобразования в C++:

C-style

Как следует из названия, этому типу приведения предпочитает язык программирования C. Это также известно как обозначение приведения.

Синтаксис этого стиля:

Использование функционального стиля

Мы также можем использовать такую функцию, как нотация, для преобразования данных из одного типа в другой.

Пример 3: приведение типов

Мы использовали преобразование типа в стиле C и преобразование в функциональный стиль, и отобразили результаты. Поскольку они выполняют одну и ту же задачу, оба дают нам одинаковый результат.

Операторы преобразования типов

Помимо этих двух приведений типов, C++ также имеет четыре оператора преобразования типов:

Источник

Портал про кино и шоу-биз