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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
maddoxx
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 24
#1

Дружественные (friend) функции - C++

06.12.2013, 00:31. Просмотров 516. Ответов 5
Метки нет (Все метки)

Доброго времени суток.
Кратко о сути:
Имеются 2 класса - Float (представляет собой число типа float) и FloatMatrix (представляет собой матрицу с типом float).
Так вот, я хочу написать дружественную функцию, которая бы умножала матрицу из объекта класса FloatMatrix на число из объекта Float.
Соответственно у меня 5 файлов:
main.cpp
Float.h
FloatMatrix.h
Float.cpp
FloatMatrix.cpp

Но я конкретно путаюсь к какому классу нужно писать friend функцию.
Я сделал следующим образом:
Объявил friend функцию в FloatMatrix.h
C++
1
friend void mulMatrixForValue(Float value, FloatMatrix & matrix);
В FloatMatrix.cpp написал ее реализацию
C++
1
2
3
4
5
6
void mulMatrixForValue(Float value, FloatMatrix & matrix)
{
    for(int i=0; i<matrix.getColumn(); i++)
        for(int j=0; j<matrix.getRow(); j++)
            matrix.ptr[i][j] = matrix.ptr[i][j] * value.getValue();
}
И в FloatMatrix.cpp подключил
C++
1
#include "floatClass.h"
Но возникают ошибки типа:
C++
1
2
Ошибка  1   error C2255: friend: не допускается вне определения класса  c:\documents and settings\admin\рабочий стол\5\5\floatmatrixclass.h 27
Ошибка  8   error C2248: FloatMatrix::ptr: невозможно обратиться к private член, объявленному в классе "FloatMatrix"    c:\documents and settings\admin\рабочий стол\5\5\floatmatrixclass.cpp   217
Подскажите пожалуйста, как правильно связать логику этой функции с файлами?(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2013, 00:31     Дружественные (friend) функции
Посмотрите здесь:

Дружественные функции, реализация и вызов: Friend used outside of class - C++
Подскажите, пожалуйста, как превратить этот метод вычисления боковой поверхности в дружественную функцию: long double...

Friend-функции - C++
из теории ясно, что friend функция — это функция, которая не является членом класса, но имеет доступ к членам класса, объявленным в полях...

Реализация friend функции - C++
Есть код. Нужно реализовать вывод ответа через friend. Подскажите пожалуйста как это сделать? Ничего не получается... #include &lt;iostream&gt;...

Не работают friend функции - C++
Есть класс Student, где объявлены дружественные функции: #pragma once #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;valarray&gt; ...

friend и member функции - C++
Народ, объясните пожалуйста как пишутся данные функции, принцип их написания, откуда что берется. И несколько примеров пожалуйста....

Реализация дружественной (friend) функции - C++
Всем доброго времени суток. Хотел бы попросить помощи, ибо запутался. Задачи состоит в том, чтобы произвести сравнение объекта...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.12.2013, 01:10     Дружественные (friend) функции #2
Цитата Сообщение от maddoxx Посмотреть сообщение
Объявил friend функцию в FloatMatrix.h
Это в объявлении класса нужно сделать. Если нужно, то можно в двух классах.
maddoxx
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 24
06.12.2013, 01:21  [ТС]     Дружественные (friend) функции #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Это в объявлении класса нужно сделать. Если нужно, то можно в двух классах.
Так я же так и сделал вроде бы, вот чуть кода:
Обьявление друж.функции
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
//FloatMatrix.h
#ifndef floatMatrixClass_h
#define floatMatrixClass_h
 
class FloatMatrix
{
    float **ptr;
    int column,row,error;
public:
    FloatMatrix();
    FloatMatrix(int);
    FloatMatrix(int, int);
    FloatMatrix(FloatMatrix &);
    ~FloatMatrix();
    void setColumn(int);
    int getColumn();
    void setRow(int);
    int getRow();
    void setError(int);
    int getError();
    void reallocMemoryLine(int);
    void reallocMemoryMatrix(int, int);
    void inputMatrix();
    void printMatrix();
    void exceptionError();
    friend void mulMatrixForValue(Float value, FloatMatrix & matrix);
};
 
#endif floatMatrixClass_h
Реализация
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//FloatMatrix.cpp
#ifndef floatMatrixClass_cpp
#define floatMatrixClass_cpp
 
#include <iostream>
#include <iomanip>
#include "floatMatrixClass.h"
#include "floatClass.h"
 
using namespace std;
 
void mulMatrixForValue(Float value, FloatMatrix & matrix)
{
    for(int i=0; i<matrix.getColumn(); i++)
        for(int j=0; j<matrix.getRow(); j++)
            matrix.ptr[i][j] = matrix.ptr[i][j] * value.getValue();
}
#endif floatMatrixClass_cpp
Не пойму что не так
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.12.2013, 02:10     Дружественные (friend) функции #4
Цитата Сообщение от maddoxx Посмотреть сообщение
#ifndef floatMatrixClass_cpp
#define floatMatrixClass_cpp
Для .cpp такое не делают, или вы его где-то подключаете?
Цитата Сообщение от maddoxx Посмотреть сообщение
#include "floatMatrixClass.h"
#include "floatClass.h"
class FloatMatrix в каком .h файле объявлен? Вверху кода написано, что FloatMatrix.h. Если так, то где подключение? Или не так написано?
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
06.12.2013, 08:13     Дружественные (friend) функции #5
Цитата Сообщение от maddoxx Посмотреть сообщение
Не пойму что не так
Попробуй сделать и определение функции там же.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2013, 08:49     Дружественные (friend) функции
Еще ссылки по теме:

Friend-функции перегрузки оператора - C++
Всем доброго времени суток =) У меня есть следующий код заголовочного файла: enum month {jan = 1, feb, mar, apr, may, jun, jul, aug, sep,...

Почему ругается в friend функции - C++
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; ost, const Array&amp; Ar) { for(int i=0; i&lt;m_current; i++) ost&lt;&lt;&quot;{&quot;&lt;&lt;arr&lt;&lt;&quot;}&quot;; return ost; ...

дружественные функции - C++
Тема: дружественные функции Напишите программу обращения слова. Помогите решить на С++

Дружественные функции - C++
Напишите программу, вычеркивающую из данного слова все буквы «а» (так, чтобы, например, из слова «заноза» получилось «зноз»), через...

Дружественные функции - C++
Задание такое: Дано 2 класса: stud, содержащий сведения о студенте (фамилия, вуз, номер группы) и vozrast, содержащий возраст студента....

дружественные функции - C++
Всем привет!!! Есть код: #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;string.h&gt; enum...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
06.12.2013, 08:49     Дружественные (friend) функции #6
А какие ошибки выдает компилятор?
getValue() из класса Float общедоступная (public)?
C++
1
void mulMatrixForValue(Float value, FloatMatrix & matrix);
еще должна быть объявлена в заголовочном файле вне тела класса FloatMatrix (без слова friend).
Кстати, у Вас она умножает матрицу на число и результат получается в этой же матрице.
Если надо результат получить в другой матрице, то функция должна быть такой
C++
1
FloatMatrix mulMatrixForValue(Float value, FloatMatrix & matrix);
Yandex
Объявления
06.12.2013, 08:49     Дружественные (friend) функции
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru