Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Ошибка: friend declaration declares a non-template function - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Алгоритм сортировки http://www.cyberforum.ru/cpp-beginners/thread82927.html
Ребята, помогите сделать код... мне нужно вывести на екран даные из фаила (таблицу) так чтобы она сортировалась по убыванию скажем, столбец termen(срок годности продукта) чтобы сортировался по...
C++ Массив Дана последовательность чисел, которая имеет одинаковые элементы. Отсортировать по возрастанию методом выбора , исключить одинаковые элементы. Сама сортировка понятна. А как исключить одинаковые... http://www.cyberforum.ru/cpp-beginners/thread82920.html
C++ посчитать квадрат матрицы
С++ Даны две вещественные квадратные матрицы 10-го порядка. Напечатать квадрат той из них, в которой наименьший след (сумма диагональных элементов), считать, что такая матрица одна.
Командная строка. Безтиповой указатель. C++
Вот примерная прога которая должна запускаться на борланде. Вопрос в следующем можно ли написать эту ф-цию для среды Visual(проблема заключается в наращивании шага безтипового указателя) Заранее...
C++ Ошибка при выводе самой длинной строчки. http://www.cyberforum.ru/cpp-beginners/thread82888.html
#include<iostream.h> #include<conio.h> #include<string.h> using namespace std; void main() {string s;int n,k,min; cout<<"koli4estvo stro4ek"<<" ";cin>>n; clrscr(); for...
C++ Вывод long double с используя printf() #include <iostream> #include <cmath> long double R(int n, int r) { long double sq = (long double) sqrt((long double)r*r - ((long double)n/2)*((long double)n/2)); long double res = (long... подробнее

Показать сообщение отдельно
togramago
9 / 9 / 0
Регистрация: 03.11.2009
Сообщений: 39

Ошибка: friend declaration declares a non-template function - C++

06.01.2010, 04:53. Просмотров 1907. Ответов 3
Метки (Все метки)

Всем доброго времени суток!
Я корплю над задачкой: нада сделать класс вектор шаблонным, перегрузить операции ввода-вывода, и тд и тп.
Вот с вводом-выводом у меня и проблемы.
Вернее со всеми шестью friend функциями.
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
template <class T, int N> class Vector //int N - template value of vector elements
{
    int size; //current size of vector (number of elements)
    int max; //max number of elements
    T * value;
 
public:
    Vector();
    virtual ~Vector();
    Vector(int max);
    Vector(const Vector<T, N> & v);
 
    int getSize() const;
    void setSize(int size);
 
    T & operator[](int i);
 
    Vector<T, N> & operator=(const Vector<T, N> & v);
 
    bool operator==(const Vector<T, N> & v);
    bool operator!=(const Vector<T, N> & v);
    bool operator>(const Vector<T, N> & v);
    bool operator>=(const Vector<T, N> & v);
    bool operator<(const Vector<T, N> & v);
    bool operator<=(const Vector<T, N> & v);
 
    /*1*/friend const Vector<T, N> & operator+(const Vector<T, N> & v1, const Vector<T, N> & v2);
    /*2*/friend const Vector<T, N> & operator-(const Vector<T, N> & v1, const Vector<T, N> & v2);
    /*3*/friend const Vector<T, N> & operator*(const Vector<T, N> & v1, const Vector<T, N> & v2);
    /*4*/friend const Vector<T, N> & operator/(const Vector<T, N> & v1, const Vector<T, N> & v2);
 
    const Vector<T, N> & operator+=(const Vector<T, N> & v);
    const Vector<T, N> & operator-=(const Vector<T, N> & v);
    const Vector<T, N> & operator*=(const Vector<T, N> & v);
    const Vector<T, N> & operator/=(const Vector<T, N> & v);
 
    /*5*/friend std::istream & operator>>(std::istream & is, Vector<T, N> & v);
    /*6*/friend std::ostream & operator<<(std::ostream & os, const Vector<T, N> & v);
};

На них (на функции 1-6) выдает не ошибку, а предупреждение (я токо хэдер написала еще)
предупреждение такое:

Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"Vector.d" -MT"Vector.d" -o"Vector.o" "../Vector.cpp"
In file included from ../Vector.cpp:8:
../Vector.h:40: warning: friend declaration ‘const Vector<T, N>& operator+(const Vector<T, N>&, const Vector<T, N>&)’ declares a non-template function
../Vector.h:40: note: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here)
../Vector.h:41: warning: friend declaration ‘const Vector<T, N>& operator-(const Vector<T, N>&, const Vector<T, N>&)’ declares a non-template function
../Vector.h:42: warning: friend declaration ‘const Vector<T, N>& operator*(const Vector<T, N>&, const Vector<T, N>&)’ declares a non-template function
../Vector.h:43: warning: friend declaration ‘const Vector<T, N>& operator/(const Vector<T, N>&, const Vector<T, N>&)’ declares a non-template function


Когда гуглила много раз находила, что нада сделать вот такое:
C++
1
2
friend std::istream & operator>> <>(std::istream & is, Vector<T, N> & v);
    friend std::ostream & operator<< <>(std::ostream & os, const Vector<T, N> & v);
но на такую запись выдает не предупреждение а ошибку (хочет сразу за < поставить ; )

Подскажите, пожалуйста, как можно решить эту проблемку?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru