Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 12.01.2016
Сообщений: 29
1

Объявление статической переменной и статической функции в классе

14.06.2017, 19:29. Показов 690. Ответов 2
Метки нет (Все метки)

Добрый вечер, столкнулся с проблемой и не могу решить. Есть класс SavingsAccount и в нем объявлена статическая переменная для процентной ставки на всех клиентов. Есть функция modifyInterestRate которая должна изменять значение статической переменной если соответствует диапазону от 0 до 100. Проблема в том что как я понимаю компилятор жалуется на функцию которая тоже статическая, но вот как решить данную проблему не смог найти, прошу помощи вот файлы класса и реализации
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef SAVINGSACCOUNT_H
#define SAVINGSACCOUNT_H
class SavingsAccount{
public:
    SavingsAccount(double=0,int=0);
    ~SavingsAccount();
    SavingsAccount &calculateMonthlyInterest();
    static void modifyInterestRate(int);
    void print()const;
private:
    int static annualInterestRate;
    double savingsBalance;
 
};
#endif
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
#include <iostream>
#include <iomanip>
 
#include "SavingsAccount.h"
 
using namespace std;
 
SavingsAccount::SavingsAccount(double balance,int rate)
{
    annualInterestRate = 0;
    cout << "Конструктор класс SavingsAccount запущен" << endl;
    modifyInterestRate(rate);
    savingsBalance = balance;
}
 
SavingsAccount::~SavingsAccount()
{
    cout << "Деструктор класса SavingsAccount запущен" << endl;
}
 
void SavingsAccount::modifyInterestRate(int rate){
    if (rate >= 0 && rate <= 100)
        annualInterestRate = rate;
    else{
        cout << "Ошибка ввода процентной ставки, ставка выставлена в 0%" << endl;
        annualInterestRate = 0;
    }
}
 
SavingsAccount &SavingsAccount::calculateMonthlyInterest(){
    savingsBalance += (savingsBalance*(static_cast<double>(annualInterestRate)*0.01)) / 12;
    return *this;
}
void SavingsAccount::print()const{
    cout << "Текущий баланс при процентной ставке: " << annualInterestRate << "% равен: $" <<fixed<<setprecision(2)<< savingsBalance << endl;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <iomanip>
#include <math.h>
 
#include "SavingsAccount.h"
 
 
using namespace std;
 
int main(){
    setlocale(LC_ALL, "Russian");
    SavingsAccount saver1(2000.0);
    SavingsAccount saver2(3000.0);
    SavingsAccount::modifyInterestRate(5);
    saver1.calculateMonthlyInterest().print();
    saver2.calculateMonthlyInterest().print();
    return 1;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2017, 19:29
Ответы с готовыми решениями:

Вылет приложения при вызове статической функции/переменной из библиотеки
Создал библиотеку в ней есть статический класс при вызове которого из приложения получаю аварийное...

Инициализация статической константы в классе
собственно сабж как это сделать если константа имеет тип класса? (не интегральная) т.е. надо...

Объявление статической переменной
в наследнике класса Thread в модуле h объявляю private static int iLink. Компилится нормально....

Проблема с взаимодействием динамической и статической памяти - обращение к статической переменной
Здравствуйте! Помогите решить проблему! Задача такая: написать сортировку бинарным деревом, так...

2
281 / 235 / 114
Регистрация: 07.09.2016
Сообщений: 587
14.06.2017, 19:38 2
рядом с реализацией методов сделайте инициализацию статической переменной:

SavingsAccount::annualInterestRate = 0;
вроде такой синтаксис. а может и
int SavingsAccount::annualInterestRate = 0;

не уверен, что int static ... это правильно.
вот static int annualInterestRate - это точно правильно.

ну и до кучи всегда выкладывайте сюда ошибки, которые вам там пишут. а то их отгадывать приходится.
1
0 / 0 / 0
Регистрация: 12.01.2016
Сообщений: 29
14.06.2017, 19:43  [ТС] 3
а и еще забыл код ошибки

1>------ Сборка начата: проект: Классы часть 2, Конфигурация: Debug Win32 ------
1> Исходный код.cpp
1> SavingsAccount.cpp
1> Создание кода...
1>SavingsAccount.obj : error LNK2001: неразрешенный внешний символ ""private: static int SavingsAccount::annualInterestRate" (?annualInterestRate@SavingsAccount@@0HA)"
1>E:\General\YandexDisk\Программирование\C++\project_c++\Кла ссы часть 2\Debug\Классы часть 2.exe : fatal error LNK1120: неразрешенных внешних элементов: 1
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Добавлено через 1 минуту
int SavingsAccount::annualInterestRate = 0; сделал и заработало, спасибо большое)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2017, 19:43

Инициализация статической переменной в базовом классе
Есть класс Tank. От этого класса будут наследники MyTank и EnemyTank. В классе Tank есть...

Обращение к статической переменной указав ее как параметр функции
Добрых времени суток. Есть статический класс. public static class DataActions { ...

Создание статической переменной
Задание звучит так: Объявить статическую переменную z. При каждом нажатии командной кнопки значение...

Наследование статической переменной
есть класс с статистическим полем я от него &quot;произвожу&quot; два потомка. у всех этик классов будет...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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