undefined reference, или почему не видит объявление?

292
12 февраля 2018, 04:30

Не могу правильно воспользоваться перегруженной функцией 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;
}
Answer 1

Может, не

<< end;

а все же

<< endl;

?

И еще - вот это - &(e.pop()) - некорректно: брать адрес rvalue...

READ ALSO
SDL_CreateThread и барьер памяти

SDL_CreateThread и барьер памяти

До запуска дополнительного потока создается семафор, который используется в создаваемом потоке:

191
Функция cin.getline() [дубликат]

Функция cin.getline() [дубликат]

На данный вопрос уже ответили:

176
Ошибка use of undefined type

Ошибка use of undefined type

Есть два класса TextQuery и QueryResultПервый использует в методах второй и второй соответственно первый

206