Аргумент 'sample2' скрывает глобальное объявление того же символа - PullRequest
0 голосов
/ 11 мая 2010

У меня странная проблема в C. У меня есть структура, и я указал образец на эту структуру:

test sample;

Теперь в коде я вызываю эту структуру через функцию:

функция называется something, поэтому something(&sample) используется для указания структуры в функции.

Теперь мне нужно скопировать значения sample в sample2 .. Поэтому я хочу, чтобы sample2 также указывал на ту же структуру. Поэтому я также объявил test sample2 перед main и использовал ее как глобальную переменную. Теперь, когда он используется для указания на содержимое в структуре в функции, sample должен вызываться без (*sample2).content или sample2->content. Мне нужно только написать sample2.content. Я понимаю, что это происходит потому, что sample2 объявлен глобально ... Но я также получаю это при компиляции:

comment 528 - Argument 'sample2' conceals a global declaration of the same symbol

Программа работает нормально, но я хочу избавиться от этого сообщения компилятора ... Почему это так сказано? что это значит?

Ответы [ 3 ]

1 голос
/ 11 мая 2010

Проблема в том, что внутри функции, если вы обращаетесь к символу sample, у компилятора есть две вещи на выбор.Первая - это глобальная переменная, а вторая - аргумент, предоставленный вами функции.То, что делает компилятор, предупреждает вас о том, что предполагается, что вы имеете в виду локальную переменную, а не глобальную.

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

1 голос
/ 11 мая 2010

На самом деле, вы должны использовать точечный (.) элемент выбора, а не стрелка (->) член выбора, потому что образец является структурой, а чем указатель на структуру. Что не имеет никакого отношения к полученному вами сообщению об ошибке;

Мне кажется (поскольку я не вижу ваш код), вы передаете sample2 в качестве аргумента функции. Это sample2 отличается от sample2 от структуры, которую вы объявили глобально. Поскольку они имеют одинаковое имя, вы сможете использовать только аргумент в этой функции, а не глобальный sample2.

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

1 голос
/ 11 мая 2010

Не видя код, я не могу быть уверен ...

Но, похоже, у вас есть функция, которая проходит «тест», который вы назвали «sample2», что означает, что вы не можете получить доступ к семплу 2, который вы определили глобально.

Размещение кода в вашем вопросе было бы полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...