Не могу правильно воспользоваться перегруженной функцией operation<<
.
//mystack.h
#ifndef MYSTACK_H
#define MYSTACK_H
const int MAX = 100;
template <class Type>
class MyStack {
private:
Type st[MAX]; //стек – массив любого типа
int top; //индекс вершины стека
public:
MyStack(); //конструктор
void push(Type var); //занести число в стек
Type pop(); //взять число из стека
};
template<class Type>
MyStack<Type>::MyStack() {
top = -1;
}
template<class Type>
void MyStack<Type>::push(Type var) {
st[++top] = var;
}
template<class Type>
Type MyStack<Type>::pop() {
return st[top--];
}
#endif // MYSTACK_H
main.cpp
// maim.cpp
#include <iostream>
#include <string>
#include "mystack.h"
using namespace std;
class Employee {
private:
string _name;
unsigned long _number;
public:
Employee() {}
Employee(string name, unsigned long number): _name(name), _number(number) {}
friend ostream& operator << (ostream& s, const Employee& e);
};
ostream& operator << (ostream& s, const Employee& e) {
return s << "Name: " << e._name << ", number: " << e._number;
}
int main()
{
MyStack<Employee> e;
e.push(Employee("Misha", 1));
e.push(Employee("Vanya", 2));
e.push(Employee("Vova", 3));
Employee temp;
temp = e.pop();
cout << "1: " << temp << endl; // тут ошибок нет
cout << "2: " << (e.pop()) << end; // ошибка: no match for 'operator<<'
// (operand types are 'std::ostream {aka std::basic_ostream<char>}'
// and '<unresolved overloaded function type>')
cout << "3: " << (&(e.pop())) << end; // ошибка1: taking address
// temporary [-fpermissive]
// ошибка2: no match for 'operator<<' (operand types are
// 'std::basic_ostream<char>::__ostream_type
// {aka std::basic_ostream<char>}' and
// '<unresolved overloaded function type>')
return 0;
}
Может, не
<< end;
а все же
<< endl;
?
И еще - вот это - &(e.pop())
- некорректно: брать адрес rvalue...
До запуска дополнительного потока создается семафор, который используется в создаваемом потоке:
Есть два класса TextQuery и QueryResultПервый использует в методах второй и второй соответственно первый