Нельзя образовывать ссылку на массив нулевой длины — КиберПедия 

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Нельзя образовывать ссылку на массив нулевой длины

2022-10-05 36
Нельзя образовывать ссылку на массив нулевой длины 0.00 из 5.00 0 оценок
Заказать работу

Reference to a zero-sized array is illegal

Ссылку можно инициализировать только реально существующим объектом, массив нулевого размера в С++ быть не может. Объявление массива нулевого размера означает, что где-то в другом модуле существует массив не нулевого размера на который это объявление ссылается. Для того что бы образовать ссылку необходимо знать истинное объявление объекта.

typedef int ai[]; extern int eai[]; ai &rai1 = eai; int (&rai2)[] = eai;

FEC00115 ERROR

Неверный деструктор '%s'

Illegal destructor '%s'

FEC00116 ERROR

Нельзя объявлять тип при задании типа возвращаемого значения функции

Cannot define type as a function result type

В С++ нельзя объявлять типы при задании аргументов или возвращаемого значения функций. В С такие объявления разрешены. Запрет связан с тем, что в С++ реализована именная эквивалентность типов, а в С структурная. Так как область действия такого объявления является областью действия парметров функции, то данное объявление не будет видно за пределами объявления функции. С.1.6 [diff.decl] #2

class A { } f(int a);

FEC00117 ERROR

Синтаксическая ошибка в описании пространства имен

Syntax error in namespace definition

Не верный синтаксис объявления 'namespace'. После служебного слова 'namespace' должен идти необязательный идентификатор и открывающаяся фигурная скобка.

namespace class A {}

FEC00118 ERROR

Неверная конструкция после операции '::'

Illegal syntax after '::'

Ошибочный синтаксис после оператора '::', после оператора '::' должно идти имя члена класса, пространства имен или глобального пространства имен. Проверьте синтаксис.

::int a;

FEC00120 ERROR

Для вызова '%s' следует использовать операции '.' или '->'

use '.' or '->' to call to '%s'

Нестатическая Функция член вне контекста этого класса должна вызыватся с использоанием операции '.' или '->'. Измените способ вызова функции на использование операции '.' или '->'.

struct A { void operator +(A& a); }; class B { void g(A& a1, A& a2) { A::operator+(a1, a2); } };

FEC00121 ERROR

Деление на ноль

Division by zero

При вычислении константных выражений произошло деление на ноль. Результат вычисления выражения содержащего деление на ноль не определен.

int a[10/0];

FEC00123 ERROR

Нельзя сравнивать объекты типов '%s' и '%s'

Cannot compare objects of types '%s' and '%s'

Типы операндов в операции сравнения несравнимы, и между ними не существует операции неявного преобразования типа. Проверьте типы операндов и, если необходимо, вставьте явное преобразование типов.

bool f(void* pv, int i) { return pv i; }

FEC00129 ERROR

Неверный тип условия в операторе '%s'

Illegal type in condition of '%s' statement

Недопустимый тип условия в операторе 'if', 'while', 'do', 'for' или 'switch'. Для операторов 'if', 'while', 'do' или 'for' условие должен иметь тип 'bool' или тип неявно преобразуемый к нему. Для оператора 'switch' типы условия должен иметь интегральный, перечислимый тип или тип неявно преобразуемый к первым двум. Проверьте тип условия в операторе и, если необходимо, вставьте явное преобразование типов.

void f(void* pv) { switch(pv) { case 0: return; } }

FEC00130 ERROR

Нельзя инициализировать ссылку на неконстантный объект не-l-значением

Cannot initialize reference to non-constant with non l-value

Так как через неконстантнюу ссылку объект может быть изменен, то образовывать неконстантную ссылку на объект который нельзя изменять недопустимо. В случае если необходимо образовать ссылку на объект, который нельзя изменять, то необходимо образовать ссылку на константный объект.

void f(const int& cri) { int& ri = cri; }

FEC00132 ERROR

Переход на '%s'

Jump to '%s'

FEC00134 ERROR

Невозможно изменить константное значение типа '%s' в операции '%s'

Cannot change constant value of type '%s' in '%s' operator

Значения объектов константного типа в пределах их области видимости не может быть изменено после инициализации. Однако константность может быть снята с помощью преобразования 'const_cast', смотрите описание.

const int c = 5; void f() { c++; }

FEC00140 ERROR

Рассогласование типов в операции '%s' в константном выражении

Type mismatch for '%s' operator in constant expression

Битовые и логические операции определены только для интегральных типов. Проверьте типы операндов и, если необходимо, добавьте явное преобразование типов.

int f(int i, float f) { return f & i; }

FEC00143 ERROR

Удаление объекта неполного типа '%s'

Delete object of incomplete type '%s'

По Стандарту поведение реализации в этом случае не определено. В связи с тем, что для объекты неполного типа не известно, есть ли у деструктор и доступен ли он, то генерируется ошибка. Поместите полное объявление типа объекта до его удаления с помощью оператора 'delete'.

class A; void f(A* pa) { delete pa; }

FEC00145 ERROR

Инициализация '%s' агрегатом не допускается

Aggregate initializer for '%s' is not allowed

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

int i = { 1, 2 };

FEC00147 ERROR

Нельзя брать адрес битового поля '%s'

Cannot take an address of bit-field '%s'

Так как большинство процессоров не могут адресовать единичные биты в байте, то в С и С++ нельзя брать адрес битовых полей. Если необходимо брать адрес переменной, то сделайте ее минимального по размеру типа 'char'. В большинстве случаев следует избегать использования битовых полей.

struct S { int a: 3; int* f() { return &a; } };

FEC00148 ERROR

В операции '%s' нельзя использовать операнды перечислимого типа '%s'

Cannot use '%s' operator for operand of type '%s'

В С++ операции '++' или '--' не определены для перечислимых типов, однако в С это разрешено. В С можно применять операции '++' или '--' для перечислимых типов потому, что в С перечислимый тип не вводит новый тип, перечисления рассматриваются как 'int' с именованными значениями. В С++ перечислимые типы рассматриваются как самостоятельные типы, для которых при необходимости можно перегружать различные операторы.

enum E { e }; void f(E ee) { ee++; }

FEC00149 ERROR

В постфиксной операции '%s' операнд не является l-значением

Operand is not an lvalue in postfix '%s' operator

Операнд для постфиксной операции '++' или '--' не является l-значением, а постфиксные операции '++' или '--' применимы только для модифицируемых l-значений. Убедитесь, что операндом для постфиксной операции '++' или '--' является l-значение.

void f(int i) { (i + 1)++; }

FEC00150 ERROR


Поделиться с друзьями:

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.006 с.