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

Как объявить глобальную ссылку на клас с конструктором, принимающим один параметр - C++

Восстановить пароль Регистрация
 
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
07.05.2012, 20:48     Как объявить глобальную ссылку на клас с конструктором, принимающим один параметр #1
Столкнулся с проблемой. Пытаюсь в классе №1 создать переменную класса №2, а уже потом в конструкторе класса №1 проинициализировать его, но не получается Компилятор сыпет мне кучу ошибок:
Error 1 error C2512: 'BinaryFile' : no appropriate default constructor available 71 1
Error 2 error C2064: term does not evaluate to a function taking 1 arguments 73 1
3 IntelliSense: no default constructor exists for class "BinaryFile" 72 2
4 IntelliSense: call of an object of a class type without appropriate operator() or conversion functions to pointer-to-function type 73 3
Ругается он именно на это место:
C++
1
2
3
4
5
    PhoneBook(string fileName)
    {
        bf(fileName);
        count = bf.GetNumberRecords();
    }
А весь код вот:
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
struct pb_record{
    char name[25];
    int number;
};
 
class BinaryFile
{
private:
    string fileName;
public:
    BinaryFile(string fName)
    {
        fileName = fName;
    }
 
    bool AddRecord(pb_record pbr)
    {
        ofstream ofs(fileName, ios::binary | ios_base::in | ios_base::out);
        if (!ofs.is_open())
        {
            cout << "Unable to open file \"" << fileName << "\"" << endl;
            return false;
        }
 
        ofs.seekp(0, ios::end);
        ofs.write((char*)&pbr, sizeof(pb_record));
        ofs.close();
        return true;
    }
 
    int GetNumberRecords()
    {
        int count;
        ifstream ifs (fileName, ios::binary);
        if (!ifs.is_open())
        {
            count = 0;
        }
        else
        {
            ifs >> count;
        }
        ifs.close();
        return count;
    }
};
 
class PhoneBook
{
private:
    BinaryFile bf;
    int count;
public:
    PhoneBook(string fileName)
    {
        bf(fileName);
        count = bf.GetNumberRecords();
    }
 
    void Add()
    {
        pb_record pbr;
        cout << "Enter people name: ";
        cin >> pbr.name;
        cout << "Enter phone number: ";
        cin >> pbr.number;
        if(bf.AddRecord(pbr))
            cout << "Record successfully added!" << endl;
        else
            cout << "Could not add record." << endl;
    }
 
    //void Delete(int number);
    //void ShowRecord(int number);
    //void ShowAll(int number);
    //void Find(string peopleName);
};
 
int main()
{
    PhoneBook pb("PhoneBook.bin");
    fflush(stdin);
    cin.get();
}
Помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2012, 20:48     Как объявить глобальную ссылку на клас с конструктором, принимающим один параметр
Посмотрите здесь:

Немогу объявить глобальную переменную C++
C++ необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера
C++ Как объявить глобальную переменную в Dev-C++ 4.9.9.2?
C++ Битовое ИЛИ. Пердача нескольких констант в один параметр функции
C++ клас Letter, клас Person
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
07.05.2012, 21:11     Как объявить глобальную ссылку на клас с конструктором, принимающим один параметр #2
вот подправил

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
struct pb_record{
    char name[25];
    int number;
};
 
class BinaryFile
{
private:
    string fileName;
public:
    BinaryFile(string fName):fileName(fName){}
 
    bool AddRecord(pb_record pbr)
    {
        ofstream ofs(fileName.c_str(), ios::binary | ios_base::in | ios_base::out);
        if (!ofs.is_open())
        {
            cout << "Unable to open file \"" << fileName << "\"" << endl;
            return false;
        }
 
        ofs.seekp(0, ios::end);
        ofs.write((char*)&pbr, sizeof(pb_record));
        ofs.close();
        return true;
    }
 
    int GetNumberRecords()
    {
        int count;
        ifstream ifs (fileName.c_str(), ios::binary);
        if (!ifs.is_open())
        {
            count = 0;
        }
        else
        {
            ifs >> count;
        }
        ifs.close();
        return count;
    }
};
 
class PhoneBook
{
private:
    BinaryFile bf;
    int count;
public:
    PhoneBook(string fileName):bf(fileName)
    {
 
        count = bf.GetNumberRecords();
    }
 
    void Add()
    {
        pb_record pbr;
        cout << "Enter people name: ";
        cin >> pbr.name;
        cout << "Enter phone number: ";
        cin >> pbr.number;
        if(bf.AddRecord(pbr))
            cout << "Record successfully added!" << endl;
        else
            cout << "Could not add record." << endl;
    }
 
    //void Delete(int number);
    //void ShowRecord(int number);
    //void ShowAll(int number);
    //void Find(string peopleName);
};
 
int main()
{
    PhoneBook pb("PhoneBook.bin");
    fflush(stdin);
    cin.get();
}
Добавлено через 2 минуты
Цитата Сообщение от Tolias28 Посмотреть сообщение
PhoneBook(string fileName) { bf(fileName); count = bf.GetNumberRecords(); }
на это ругается потому что надо использовать список инициализации
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
07.05.2012, 21:12  [ТС]     Как объявить глобальную ссылку на клас с конструктором, принимающим один параметр #3
antoha398, огромное огромное спасибо за помощь!
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
07.05.2012, 21:35     Как объявить глобальную ссылку на клас с конструктором, принимающим один параметр #4
Цитата Сообщение от Tolias28 Посмотреть сообщение
C++
1
fflush(stdin);
Why fflush(stdin) is wrong

Добавлено через 1 минуту
Буфер ввода можно очистить вот таким образом
C++
1
2
3
#include <limits>
//...
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Yandex
Объявления
07.05.2012, 21:35     Как объявить глобальную ссылку на клас с конструктором, принимающим один параметр
Ответ Создать тему
Опции темы

Текущее время: 00:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru