Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2011, 20:35   #1
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию Использование шаблона stack в классе

Есть код
Код:
#include "stdafx.h"

using namespace std;
#include "iostream"
#include "stack"

class st{
public:
	//st(){
	//	a=stack<int>;
	//}
	stack<int>& operator+(st& b){
		for(int i=0;i<b.a.count();i++) a.push(b.a.pop());
		return &a;
	}
	void operator=(st& b){
		a.clear();
	    for(int i=0;i<b.a.count();i++) a.push(b.a.pop());
	}
	stack<int>& operator()(st& b,int n){
		a.clear();
		for(int i=0;i<n;i++) a.push(b.a.pop());
		return &a;
	}

private:
	stack<int> a;
};

bool operator==(st& a,st& b){
	bool k=0;
	if(a.a.count()!=b.a.count) return 0;
	else{
		for(int i=0;i<a.a.count();i++)
			if(a.a.pop()!=b.a.pop())
				k=1;
		if(k) return 0;
		else return 1;
	}
}
bool operator!=(st& a,st& b){
	bool k=0;
	if(a.a.count()!=b.a.count) return 1;
	else{
		for(int i=0;i<a.count();i++)
			if(a.a.pop()!=b.a.pop())
				k=1;
		if(k) return 1;
		else return 0;
	}
}

double norma(st& y){
	double s;
	for(int i=0;i<y.a.count();i++)
		s+=(double)((y.a.pop())*(y.a.pop()));
	return pow(s,1/y.a.count());
}

bool operator<(st& a,st& b){
	return norma(a)<norma(b)?1:0;
}

bool operator>(st& a,st& b){
	return norma(a)>norma(b)?1:0;
}
int main()
{
    
	system("pause");
    return 0;
}
При попытке компиляции вылазит мегатонна ошибок, из них можно выделить несколько повторяющихся
Все на форум не помещаются, убрал повторяющиеся
Код:
1>------ Build started: Project: laba3c++2.0, Configuration: Debug Win32 ------
1>  laba3c++2.0.cpp
1>laba3c++2.0.cpp(15): error C2039: 'count' : is not a member of 'std::stack<_Ty>'
1>          with
1>          [
1>              _Ty=int
1>          ]
1>laba3c++2.0.cpp(15): error C2664: 'void std::stack<_Ty>::push(int &&)' : cannot convert parameter 1 from 'void' to 'int &&'
1>          with
1>          [
1>              _Ty=int
1>          ]
1>          Expressions of type void cannot be converted to other types
1>laba3c++2.0.cpp(16): error C2440: 'return' : cannot convert from 'std::stack<_Ty> *' to 'std::stack<_Ty> &'
1>          with
1>          [
1>              _Ty=int
1>          ]
1>laba3c++2.0.cpp(19): error C2039: 'clear' : is not a member of 'std::stack<_Ty>'
1>          with
1>          [
1>              _Ty=int
1>          ]

...................

1>laba3c++2.0.cpp(34): error C2248: 'st::a' : cannot access private member declared in class 'st'
1>          laba3c++2.0.cpp(29) : see declaration of 'st::a'
1>          laba3c++2.0.cpp(9) : see declaration of 'st'

........................

1>laba3c++2.0.cpp(37): error C2120: 'void' illegal with all types

............

1>laba3c++2.0.cpp(58): error C2296: '*' : illegal, left operand has type 'void'
1>laba3c++2.0.cpp(58): error C2297: '*' : illegal, right operand has type 'void'

...............

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Вопросы такие
Почему компилятор ругается на отсутствие в шаблоне stack методов clear и count хотя в msdn пишут что оно там есть ?
Эти методы имеют доступ к приватным данным класса st? ведь они сами принадлежат объекту который находится в той же приватной секции класса st
Строчка if(a.a.pop()!=b.a.pop()) дает ошибку error C2120: 'void' illegal with all types .. чем это может быть вызвано ?
(y.a.pop())*(y.a.pop())); дает
error C2296: '*' : illegal, left operand has type 'void'
error C2297: '*' : illegal, right operand has type 'void'
хотя pop() должен возвращать значение int .. что тут может быть не так ?
В переопределениях операторов + и = несоответствия данных, компилятор ругается на какие то указатели хотя их там вроде бы нет .. что ему не понравилось ?
Jugger вне форума Ответить с цитированием
Старый 24.11.2011, 22:01   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Цитата:
Почему компилятор ругается на отсутствие в шаблоне stack методов clear и count хотя в msdn пишут что оно там есть ?
нет там такого. есть size , а clear можно написать самому.
Цитата:
Строчка if(a.a.pop()!=b.a.pop()) дает ошибку error C2120: 'void' illegal with all types .. чем это может быть вызвано ?
стд стек Попом не возвращает значение...
верхушку через .top() получают.
Цитата:
В переопределениях операторов + и = несоответствия данных, компилятор ругается на какие то указатели хотя их там вроде бы нет .. что ему не понравилось ?
ещё как есть. амперсанды убрать перед ретурнами.
onewho вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование шаблона stack Jugger Помощь студентам 1 22.11.2011 01:34
использование макроса и файла-шаблона на сайте Arderun Microsoft Office Word 1 17.10.2011 19:57
Использование шаблона List(C++) Demonhunterus Помощь студентам 1 16.10.2010 16:20
Использование MediaPlayer в своем классе. Вадим Буренков Мультимедиа в Delphi 5 03.04.2009 17:16
Использование String^ в классе Selebro Общие вопросы C/C++ 2 01.12.2008 11:13