Тип массива является неназначенным c

Тип массива является неназначенным c

#include
#include
#include
#include
#include
#pragma comment (lib, "ws2_32.lib")
using namespace std;
int main() <
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
WSAStartup(wVersionRequested, &wsaData);

SOCKET s = socket(AF_INET, SOCK_STREAM, 0);

struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(1280);
local.sin_addr.s_addr = htonl(INADDR_ANY);
int c = bind(s, (struct sockaddr*)&local, sizeof(local));
int r = listen(s, 5);
while (true) <
char buf[255],res[100], b[255], *Res;

sockaddr_in remote_addr;
int size = sizeof(remote_addr);
SOCKETs2 = accept(s, (struct sockaddr*)&remote_addr, &size);
while (recv(s2, b, sizeof(b), 0) != 0)
<
cout Голосование за лучший ответ

Всем привет,учить недавно начал С++ пишу простые программки

Ну при компиляции VS 2015 ругается на то что "выражение не определяется константой" и "тип массива "float [n]" является неназначаемым" Подскажите, пожалуйста, где допущена ошибка и как ее исправить. Заранее благодарен.

5 ответов 5

У вас несколько проблем имеется в программе.

В C++ отсутствуют массивы переменной длины (Variable Length Arrays — VLA), размер которых можно задавать во время выполнения программы. В C++ размер массива должен быть известен на этапе компиляции, а потому задается константным выражением. Некоторые компиляторы имеют собственные расширения языка C++, которые включают поддержку массивов переменной длины, но, тем не менее, это не соответствует стандарту C++, а потому такой код будет не переносим.

Поэтому вам придется динамически распределять массив заданной пользователем длины. Например,

Или если вы хотите, чтобы элементы массива были инициализированы 0, то

Но тогда вам придется самостоятельно удалять выделенную память при завершении программы. Например,

Такой подход чреват возникновением ошибок, связанных с утечкой памяти, так как программисты порой забывают вызывать оператор delete [] для выделенной памяти.

Поэтому лучше предоставить это делать компилятору, используя стандартный контейнер std::vector , который объявлен в заголовке Деструктор этого контейнера автоматически удаляет всю выделенную память под свои элементы.

Читайте также:  Intel hd graphics 4400 какие игры пойдут

В программе вы используете цикл следующего вида

Однако эта запись определения цикла неверная. Во-первых, индексы в массивах (и в стандартном контейнере std::vector ) начинаютя с 0.

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

Правильный диапазон индексов для массива, имеющего n элементов, это [0, n) , то есть n не входит в диапазон

Еще одна проблема связана с тем, что вы не инициализировали переменную s

Поэтому она имеет неопределенное значение, и использование ее в предложениях, как, например, данное предложение

приведет к неопределенному результату.

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

С учетом всего сказанного программа может выглядеть следующим образом.

Застрял в этом в течение очень долгого времени и не могу найти решение, продолжаю получать массив сообщений об ошибках, тип ‘int [8]’ не может быть назначен. Также мне подсказывает, что «выражение записей массива должно быть изменяемым lvalue» Я пытался искать несколько раз и просто не могу думать ни о чем, любая помощь полезна, спасибо &#128578;
использование пространства имен std;

Решение

Вы объявили AccountNumber , Balance а также DaySinceDebited как массивы, но вы пытаетесь присвоить им отдельные значения. Вы относитесь к ним так, как будто они не являются массивами, потому что логически не имеет смысла, чтобы они были массивами. Помните, у вас есть несколько учетных записей (массив учетных записей), но у каждой учетной записи есть только один AccountNumber, Balance и т. Д. Не делайте их массивами. Вместо этого объявите их как:

Читайте также:  Rst sweden art 02808 инструкция

Кроме того, в каждом из ваших if , вам нужно использовать == для сравнения. На данный момент ваши заявления выглядят так:

Это назначит значение 1 в counter1 и затем проверьте, оценивается ли оно как истинное. Поскольку все целые числа (кроме 0) имеют значение true в C ++, это всегда будет выполняться. Измените их на:

Ссылка на основную публикацию
Adblock detector