Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Упростить выражение https://www.cyberforum.ru/ cpp-beginners/ thread2123799.html
Подскажите, пожалуйста, как упростить данное выражение? (x=y)?x:y
Разработать оконное приложение, которое позволяет рисовать шестиугольник по точкам C++
Разработать оконное приложение, которое позволяет рисовать шестиугольник по точкам, определяемым кликами мыши по экрану. Для отрисовки фигуры пользователь должен отметить 6 вершин в окне. Стиль линии...
C++ Рекурсивная функция
Как написать рекурсивную функцию для реализации рекуррентной последовательности? В основной программе вывести первые n членов последовательности (n вводится с клавиатуры) -1,3,-5,7,-9
C++ Числа в массиве "змейкой" Собственно задание: Код, который написан мной: int main(){ int n; cin >> n; int **a = new int*; for(int i = 0; i < n; ++i) a = new int; for (int j = 0; j<n; j += 2) { https://www.cyberforum.ru/ cpp-beginners/ thread2123779.html
C++ Бесконечная сумма с точностью Е (while do/while) SOS SOS https://www.cyberforum.ru/ cpp-beginners/ thread2123767.html
E=0.0001 Вот мои жалкие потуги. #include "stdafx.h" #include <iostream> #include <locale> #include <math.h> using namespace std;
C++ Объяснить код шейдера
ВОТ КОД ШЕЙДЕРА: #ifdef GL_ES precision mediump float; #endif #extension GL_OES_standard_derivatives : enable uniform float time; uniform vec2 mouse;
C++ Оптимизация времени выполнения
Здравствуйте! Спасибо что заглянули в тему :yes: Возник вопрос, который меня весьма озадачил: резкое падение производительности при использовании цикла на 3 круга. В задаче идет сравнение...
C++ Функции Задача 2.. Функции пользователя. Создать и вывести массив А, элементы которого описаны формулой am,n= 2fi+16(n), m, n = 1 ... 4, i - номер варианта. Составить функцию пользователя для поиска данных... https://www.cyberforum.ru/ cpp-beginners/ thread2123721.html
C++ Задача про покер https://www.cyberforum.ru/ cpp-beginners/ thread2123716.html
На сайте e-olymp проходит 97%. Где ошибка? Пишет, что третий тест не проходит, хотя у меня все работает. https://www.e-olymp.com/ru/submissions/3711034 Даны 5 целых чисел. Среди них: если...
C++ Функции Задача 1. Функции пользователя. Создать и вывести массив y с элементами y= f(k), где k = 1-12. Для расчета y создать функцию пользователя. Составить еще одну функцию пользователя для поиска данных в... https://www.cyberforum.ru/ cpp-beginners/ thread2123713.html
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 87
17.11.2017, 13:38  [ТС] 0

Конструктор класса, конструктор копирования запускается не тот который нужен

17.11.2017, 13:38. Просмотров 522. Ответов 5
Метки (Все метки)

Ответ

main.h
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
#pragma once
 
 
    class Neuron
    {
    public:
        //template <typename tInnerInActivateFunc>
        double(*dfActivate)(int);//(tInnerInActivateFunc);
        template <typename tInnerInActivateFunc>
        Neuron(int);
        Neuron(const Neuron&);
        ~Neuron();
        int iType_act;
 
    private:
        double t;//смотри в википедии в определениии линейной функции
        template <typename tInnerInActivateFunc>
        static double dfLineFunc(tInnerInActivateFunc);
        template <typename tInnerInActivateFunc>
        static double dfLineFuncWithSat(tInnerInActivateFunc);
        template <typename tInnerInActivateFunc>
        static double dfStepFunc(tInnerInActivateFunc);
        template <typename tInnerInActivateFunc>
        static double dfSigmoidFunc(tInnerInActivateFunc);
        template <typename tInnerInActivateFunc>
        static double dfLogisticFunc(tInnerInActivateFunc);
        template <typename tInnerInActivateFunc>
        static double dfHyperbolicTangent(tInnerInActivateFunc);
    };
main.cpp

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "main.h"
#include <cmath>
 
//class Neuron
 
 
template <typename tInnerInActivateFunc>
/*0 - линейная передаточная функция;
1 - линейная с насыщением;
2 - пороговая передаточная функция
3 - сигмоидальная передаточная функция
4 - логистическая функция
5 - гиперболический тангенс*/
Neuron::Neuron(int iType_activation_funk)   {
    this->iType_act = iType_activation_funk;
    switch (iType_activation_funk) {
    case 0: this->dfActivate = &this->dfLineFunc(tInnerInActivateFunc); break;
    case 1: this->dfActivate = &this->dfLineFuncWithSat(tInnerInActivateFunc);  break;
    case 2: this->dfActivate = &this->dfStepFunc(tInnerInActivateFunc); break;
    case 3: this->dfActivate = &this->dfLogisticFunc(tInnerInActivateFunc); break;
    case 4: this->dfActivate = &this->dfHyperbolicTangent(tInnerInActivateFunc);    break;
    default: this->dfActivate = &this->dfLineFunc(tInnerInActivateFunc);    break;
    }
 
}
 
Neuron::Neuron(const Neuron &n) {
    this->dfActivate = n->dfActivate;
    this->iType_act = n->iType_act;
    this->t = n->t;
}
 
Neuron::~Neuron()   {
}
 
template <typename tInnerInActivateFunc>
// линейная передаточная функция
double Neuron::dfLineFunc(tInnerInActivateFunc X) {
    return X* this->t;
}
 
template <typename tInnerInActivateFunc>
// линейная с насыщением
double Neuron::dfLineFuncWithSat(tInnerInActivateFunc X) {
    if (x <= 0) return 0;
    else if (x >= 1) return 1;
    else return x;
}
 
template <typename tInnerInActivateFunc>
// пороговая передаточная функция
double Neuron::dfStepFunc(tInnerInActivateFunc X) {
    return (X >= this->t) : 1 ? 0;
}
 
template <typename tInnerInActivateFunc>
//сигмоидная передаточная функция. пока не реализована
double Neuron::dfSigmoidFunc(tInnerInActivateFunc) {
    return 0;
}
 
template <typename tInnerInActivateFunc>
//логистическая функция
double Neuron::dfLogisticFunc(tInnerInActivateFunc X) {
    return 1 / (1 + exp(-t*x));
}
 
template <typename tInnerInActivateFunc>
//гиперболический тангенс
double Neuron::dfHyperbolicTangent(tInnerInActivateFunc X) {
    return (exp(this->t*X) - exp(-this->t*X)) / (exp(this->t*X) + exp(-this->t*X));
}
Если
C++
1
2
3
4
5
Neuron::Neuron(const Neuron &n) {
    this->dfActivate = n->dfActivate;
    this->iType_act = n->iType_act;
    this->t = n->t;
}
То пишет Error
C++
1
E0044   выражение должно иметь тип указателя     d:\newneural\main.cpp  29
Вот сюда
C++
1
    this->dfActivate = n->dfActivate;
и на следующие строки.

Добавлено через 7 минут
Изменил так


C++
1
2
3
4
5
Neuron::Neuron(const Neuron &n) {
    this->dfActivate = n.dfActivate;
    this->iType_act = n.iType_act;
    this->t = n.t;
}
Компилятор жалуется при вызове

C++
1
2
int  b = 0;
    Neuron *n = new Neuron(b);
C++
1
Ошибка    C2664   "neural_network_lib::Neuron::Neuron(const neural_network_lib::Neuron &)": невозможно преобразовать аргумент 1 из "int" в "const neural_network_lib::Neuron &" support 9
Добавлено через 1 час 49 минут
Изменил класс, теперь ни одного template

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
    class Neuron
    {
    public:
        //template <typename tInnerInActivateFunc>
        double(*dfActivate)(double);//(tInnerInActivateFunc);
        //template <typename tInnerInActivateFunc>
        Neuron(int);
        Neuron(const Neuron&);
        ~Neuron();
        int iType_act;
 
    private:
        double t;
        
         double dfLineFunc(double);
        
         double dfLineFuncWithSat(double);
        
         double dfStepFunc(double);
    
         double dfSigmoidFunc(double);
        
         double dfLogisticFunc(double);
        
         double dfHyperbolicTangent(double);
    };
Теперь проблема здесь

C++
1
2
3
4
5
6
7
8
9
10
11
12
Neuron::Neuron(/*const int &*/int iType_activation_funk)    {
    this->iType_act = iType_activation_funk;
    switch (iType_activation_funk) {
    case 0: this->dfActivate = &this->dfLineFunc;   break;
    case 1: this->dfActivate = &this->dfLineFuncWithSat;    break;
    case 2: this->dfActivate = &this->dfStepFunc;   break;
    case 3: this->dfActivate = &this->dfLogisticFunc;   break;
    case 4: this->dfActivate = &this->dfHyperbolicTangent;  break;
    default: this->dfActivate = &this->dfLineFunc;  break;
    }
 
}
C++
1
Ошибка    C2276   &: недопустимая операция с выражением привязанной функции-члена   support 18


Вернуться к обсуждению:
Конструктор класса, конструктор копирования запускается не тот который нужен
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2017, 13:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Конструктор инициализации, конструктор копирования, деструктор
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор...

Конструктор копирования для класса стек
Почему не хочет работать конструктор копирования? struct Item { int value; Item *next;...

Конструктор копирования для шаблонного класса
Не могу написать конструктор копирования для следующего класса: template &lt;typename T, typename A =...

Cделать конструктор по умолчанию и копирования для класса
Вот у меня класс строка: class strg { char *str; int len; public: strg(); strg(const...

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