Member 12702056 Ответов: 3

Почему "‘x’ и 'y' не были объявлены в этой области " эта ошибка кажется?


Привет.Пожалуйста, помогите мне.Я хочу спросить, почему "‘x’ и 'y' не были объявлены в этой области " эта ошибка кажется(на месте функции show)? Я думаю, что они были объявлены как параметры функции.Разве не так?

#include<iostream>
using namespace std;
template<class T>
class myMax{
 	T a,b;
public:
      void set(T x,T y);
	T show()
{
	return(x>y)?x:y;
}

};

template<class T>
void myMax<T>::set(T x,T y)
{
	a=x;
	b=y;
}


//_____________________________________________________

int main()
{
	myMax<int>a;
	myMax<int>a1;
	myMax<double>b;
	a1.set(5,19);
	a.set(0,-78);
	b.set(90,89.9);	
    cout<<a1.show()<<endl
	<<a.show()<<endl
	<<b.show()<<endl;	
	return 0;
}


Что я уже пробовал:

Я также пробовал другие имена переменных, но работали только a и b.

3 Ответов

Рейтинг:
9

Patrice T

Не решение, а ссылки на хорошие лекции.

Начните с книги C, язык C является предком C++. Большинство С относится к C++.
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]

Язык Программирования C++ [^]

[Обновление]
Изучите некоторые методы анализа, Метод Дейкстры сверху вниз это хорошее начало.
Это поможет вам создать структурированные алгоритмы.
https://en.wikipedia.org/wiki/Top-down_and_bottom-up_design[^]
https://en.wikipedia.org/wiki/Structured_programming[^]
https://en.wikipedia.org/wiki/Edsger_W._Dijkstra[^]
https://www.cs.utexas.edu/users/EWD/ewd03xx/EWD316.PDF[^]


Member 12702056

ppolymorphe, хорошо, спасибо :)
Я постараюсь .

Patrice T

Сохраните книги на своем компьютере и проведите хорошую лекцию :)

Member 12702056

ладно :)
но я новичок в c++, я начал в этом году,так что благодаря этому я узнаю из видео о c++ больше,чем из книг. :)

Patrice T

Книги являются справочниками
Книга на языке Си написана авторами языка Си.
Книга C++ написана автором языка C++.

Member 12702056

Я понял, что вы имеете в виду:) что это должно быть лучше, чем видео :)
Я видел, что вы профессиональный программист по своему профилю . Могу ли я спросить вас, что я хочу быть отладчиком c++, что я должен для этого сделать? Кроме того, чтобы лучше знать этот язык, что я должен делать? :) не могли бы вы дать мне совет, пожалуйста?

Patrice T

Лучше всего задавать больше вопросов здесь.
Я не специалист по C++, и другие эксперты отвечают здесь

Member 12702056

спасибо :)
я новичок на этом сайте,я не знаю, как я могу спросить эксперта?я не имею в виду значение, я знаю значение слова эксперт

Patrice T

Просто разместите свои другие вопросы так же, как и этот. Эксперты здесь.

Maciej Los

Вы должны обновить свой первый ответ, а не публиковать другой!

Patrice T

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

Maciej Los

Я понимаю это, но в принципе вы должны опубликовать только один ответ.
Овации,
Мацей

Patrice T

Это то, что я обычно делаю.
Овации

Рейтинг:
26

Patrice T

Цитата:
Я думаю, что они были объявлены как параметры функции.
Где вы видите их объявленными в этой функции ?
	T show()
{
	return(x>y)?x:y;
}

Может быть, вам стоит использовать a и b вместо этого ?
[Обновление]
Цитата:
они объявлены для функции set.
и почему я не могу использовать другие переменные?
Они объявили в комплекте функция только для установленной функции.
[Обновление]
В show, вы можете использовать a и b потому что вы объявили их в определении класса.
class myMax{
 	T a,b;


Dave Kreskowiak

Это понятие называется "сфера действия". Может быть, тебе стоит почитать об этом.

Переменные могут использоваться только в пределах определенной области. Поскольку вы определили их в рамках set метод они не видны нигде за пределами этого метода (области действия).

Мой C++ довольно ржавый, но, похоже, вам нужно явно установить значения полей a и b используя значения, переданные в set метод как x и y. Затем вы можете вернуть максимальное значение a и b от вашего show метод вместо использования x и y ценности.

Member 12702056

но почему я не могу использовать (не x, y)/например k,f вместо a и b?я понял,что x,y-это параметры другой функции, поэтому они используются только в своей области действия.
но я имею в виду, почему я не могу использовать другие имена переменных вместо a и b?
я думаю,что для этого должна быть причина, но я не могу найти эту причину.
ты знаешь это?Если вы знаете,пожалуйста, дайте мне знать

Member 12702056

Большое спасибо :)

Member 12702056

ppolymorphe, они объявлены для функции set.
и почему я не могу использовать другие переменные?
связано ли это с тем,что мы устанавливаем x в a и y в b, а затем должны использовать для отображения только эти переменные?

Patrice T

Я только что обновил свое решение.

Member 12702056

Большое спасибо :)

Рейтинг:
16

Afzaal Ahmad Zeeshan

Код, который вы показываете,

T show()
{
	return(x>y)?x:y;
}

Недопустимо, если посмотреть на определение класса (посмотрите на члены!). Вы определили только A и b как свойства в классе, x и y не заданы как свойства какого-либо типа и, следовательно, не определены в данной области.
Цитата:
работали только А и Б.
Это происходит потому, что a и b определены как свойства (члены) в вашем классе типа T- Это прекрасно исполняется. Потому что компилятор знает, какой тип использовать и где они определены в области видимости (как члены).

Решение этой проблемы состоит в том, чтобы просто использовать имена a и b. Не используйте x и y; потому что это также потребовало бы изменения определения класса!


Member 12702056

Афзааль Ахмад Зеешан, большое вам спасибо
Наконец, я получил то, что хотел понять точно :)