Имеется класс button, который будет являться кнопкой в приложении. Используется вот так:
button playButton;
playButton.create(20, 20, 120, 30, "123, 123, 123, "some", "value");
window->draw(playButton);
Сам же класс таков:
class button {
public:
void create(int x, int y, int width, int height, char color, char name, char text)
{
sf::CircleShape name(50);
name.setFillColor(sf::Color(color));
name.setOutlineThickness(10);
name.setOutlineColor(sf::Color(250, 150, 100));
name.setPosition(x, y);
}
private:
};
Однако компилятор при попытке собрать программу плюётся, выдавая:
[Error] declaration of 'sf::CircleShape name' shadows a parameter
Никак не могу понять в чём дело. Если использовать вот так, не пытаясь засунуть в класс, а сунув в основной поток то всё нормально работает:
sf::CircleShape name(50);
name.setFillColor(sf::Color(123,123,123));
name.setOutlineThickness(10);
name.setOutlineColor(sf::Color(250, 150, 100));
name.setPosition(20, 20);
window->draw(name);
В этом определении функции- члена класса
void create(int x, int y, int width, int height, char color, char name, char text)
^^^^^^^^^^
{
sf::CircleShape name(50);
^^^^^^^^
объявление локальной переменной с типом sf::CircleShape
скрывает одноименное объявление параметра с типом char
, о чем вам компилятор и сообщает, так как такое определении функции не имеет смысла.
Помимо этого вы вызываете функцию, передавая в нее в качестве аргументов строковые литералы "some"
и "value"
playButton.create(20, 20, 120, 30, "123, 123, 123, "some", "value");
^^^^^^ ^^^^^^^
которые в общем случае, если соответствующие параметры не имеют ссылочные типы, неявно преобразуются в указатели на свои первые символы и имеют тип const char *
, но никак не char
. То есть компилятор еще должен выдать диагностическое сообщение о неправильных типах аргументов для этих параметров, то есть что он не может преобразовать, например, тип const char[5]
в тип char
для аргумента "some"
.
Кроме того обратите внимание, что локальная переменная name
, объявленная в теле функции, станет не действительной после завершения работы функции. То есть время ее жизни - это тело функции во время его выполнения.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть своя реализация древовидной модели на основе QAbstractItemModelНа основе этой модели отображаются виджеты QTreeView и QComboBox (т