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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
DWand
13 / 13 / 1
Регистрация: 23.04.2011
Сообщений: 99
#1

Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" - C++

04.06.2011, 14:21. Просмотров 1806. Ответов 13
Метки нет (Все метки)

Задача состоит в том, чтобы на основе текстовых файлов сделать подобие базы данных.
Есть 3 связанных таблицы: группы, студенты, оценки.
Также нужно реализовать различные функции работы с этой базой. Нечто вроде выборок, получения различных средних значений и т.п.

В связи с необходимым функционалом решил создать такие классы:
Студент (информация про студента),
Группа (информация про группу, список студентов),
Курс (список групп),
База (сама база данных, содержит список курсов, групп и студентов).

Так как нет смысла создавать по 3 объекта на одного студента (в базе, в курсе и в группе) думаю, что не плохо было бы создавать объект один раз, а в списки добавлять указатель на этот объект.

Получилось что-то такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//класс CBase (база)
private:
    vector <CCourse> _courses;
    vector <CGroup*> _groups;
    vector <CStudent*> _students;
 
//класс CCourse (курс)
private:
    vector <CGroup*> _groups;
 
//класс CGroup (группа)
private:
    vector <CStudent*> _students;
В классе базы есть функция заполнения базы по файлу
В этой функции считывается построчно файл формируются/преобразовываются данные и на основе их создаются объекты

На данный момент дошел до момента создания групп
C++
1
2
3
//формирование данных
CGroup* newGroup = new CGroup(sName, course, code);
        _courses[course - 1].addGroup(newGroup);
Объект вроде создается, но на вторую строку ругается компилятор:
IntelliSense: argument of type "CGroup *" is incompatible with parameter of type "CGroup *"

Вот код функции addGroup:
C++
1
2
3
void CCourse::addGroup(CGroup *group) {
    _groups.push_back(group);
}
Что тут не правильно? Уже всю голову сломал ((
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
04.06.2011, 18:26     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #2
C++
1
_courses[course - 1]->addGroup(newGroup);
Добавлено через 12 минут
парю
невнимательно посмотрел
DWand
13 / 13 / 1
Регистрация: 23.04.2011
Сообщений: 99
04.06.2011, 19:02  [ТС]     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #3
Я не понимаю чем ему не нравится CGroup *
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
04.06.2011, 20:06     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #4
Вроде ошибок нет. Покажите полный код.
DWand
13 / 13 / 1
Регистрация: 23.04.2011
Сообщений: 99
05.06.2011, 00:04  [ТС]     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #5
Это то, что успел сделать до возникновения ошибки:

ЗАГОЛОВОЧНЫЕ ФАЙЛЫ

Файл including.h
C++
1
2
3
4
5
6
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;
Файл Interface.h
C++
1
2
3
4
5
6
7
8
9
#pragma once
#include "including.h"
 
class CInterface
{
public:
    CInterface(void);
    ~CInterface(void);
};
Файл Student.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "including.h"
 
class CStudent
{
private:
    int _code;
    int _groupCode;
    string _name;
    struct {
        int _year;
        int _month;
        int _day;
    } _bornDate;
    string _status;
    vector <int> _marks;
 
public:
    CStudent();
    ~CStudent();
};
Файл Group.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
#include "including.h"
#include "Student.h"
 
class CGroup
{
private:
    string _name;
    int _course;
    int _code;
    vector <CStudent*> _students;
 
public:
    string getName();
    int getCode();
    int getCourse();
    void addStudent(CStudent *student);
    vector <CStudent*> getStudents();
 
public:
    CGroup();
    CGroup(string name, int course, int code);
    ~CGroup();
};
Файл Course.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "including.h"
#include "Group.h"
 
class CCourse
{
private:
    int _number;
    vector <CGroup*> _groups;
 
public:
    int getNumer();
    void addGroup(CGroup* group);
    vector <CGroup*> getGroups();
 
public:
    CCourse(void);
    CCourse(int number);
    ~CCourse(void);
};
Файл Base.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "including.h"
#include "Course.h"
#include "Group.h"
 
class CBase
{
private:
    vector <CCourse> _courses;
    vector <CGroup*> _groups;
    vector <CStudent*> _students;
 
    string _groupsPath;
    string _studentsPath;
    string _marksPath;
 
public:
    CBase(void);
    ~CBase(void);
 
    void readFiles();
};
ФАЙЛЫ РЕАЛИЗАЦИИ

Файл main.cpp
C++
1
2
3
4
5
6
7
8
9
#include "including.h"
#include "Base.h"
 
void main(){
setlocale(LC_ALL, "russian");
CBase pBase;
pBase.readFiles();
cin.get();
}
Файл Interface.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include "Interface.h"
 
 
CInterface::CInterface(void)
{
}
 
 
CInterface::~CInterface(void)
{
}
Файл Student.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include "Student.h"
 
 
CStudent::CStudent(void)
{
}
 
 
CStudent::~CStudent(void)
{
}
Файл Group.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
#include "Group.h"
 
 
CGroup::CGroup(void) {
    _name = "undefined";
    _course = 0;
    _code = 0;
}
 
CGroup::CGroup(string name, int course, int code) {
    _name = name;
    _course = course;
    _code = code;
}
 
CGroup::~CGroup(void) {
    _students.clear();
}
 
string CGroup::getName(){
    return _name;
}
 
int CGroup::getCode(){
    return _code;
}
 
void CGroup::addStudent(CStudent *student) {
    _students.push_back(student);
}
 
vector <CStudent*> CGroup::getStudents(){
    return _students;
}
Файл Course.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
#include "Course.h"
 
CCourse::CCourse(void) {
    _number = 1;
}
 
CCourse::CCourse(int number) {
    _number = number;
}
 
CCourse::~CCourse(void) {
    _groups.clear();
}
 
int CCourse::getNumer() {
    return _number;
}
 
void CCourse::addGroup(CGroup *group) {
    _groups.push_back(group);
}
 
vector <CGroup*> CCourse::getGroups(){
    return _groups;
}
Файл Base.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
#include "Base.h"
#include <Windows.h>
 
CBase::CBase(void){
    _groupsPath = "groups.txt";
    _studentsPath = "students.txt";
    _marksPath = "marks.txt";
}
 
 
CBase::~CBase(void)
{
}
 
void CBase::readFiles(){
    fstream file;
    file.open(_groupsPath, ios::in);
    if (!file.is_open()){
        cout << "Произошла ошибка при чтении файла групп!" << endl;
        return;
    }
    char tmp[256];
    file.getline(tmp,256);
    while (!file.eof()){
        file.getline(tmp,256);
        string tmpStr = tmp;
        string sIndex;
        string sName;
        string sCourse;
        int ind;
        ind = tmpStr.find(" | ");
        sIndex = tmpStr.substr(0,ind);
        tmpStr.erase(0, ind + 3);
        ind = tmpStr.find(" | ");
        sName = tmpStr.substr(0,ind);
        tmpStr.erase(0, ind + 3);
        sCourse = tmpStr.substr(0,ind);
        int code = atoi(sIndex.data());
        int course = atoi(sCourse.data());
        
        if (_courses.size() < course){
            for (int i = _courses.size(); i < course; i++){
                _courses.push_back(CCourse(i + 1));
            }
        }
 
        CGroup* newGroup = new CGroup(sName, course, code);
        _courses[course - 1].addGroup(newGroup);
 
    }
    
    for (int i = 0; i < _courses.size(); i++){
        cout << "Курс " << i + 1 << ":" << endl;
        cout << "\tГрупп на курсе: " << _courses[i].getGroups().size() << endl;
        for (int j = 0; j < _courses[i].getGroups().size(); j++){
            cout << '\t' << _courses[i].getGroups()[j] -> getName() << endl;
        }
        cout << endl;
    }
    file.close();
}
Как-то так. Догадываюсь что далеко не самый оптимальный способ, но что получилось...
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
05.06.2011, 00:23     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #6
Я не поленился собрать проект из ваших файлов. У меня вылезли две ошибки при редефайне классов CGroup и CStudent.
Добавил в начало student.h и начало group.h строку
C++
1
#pragma once
и ошибок больше не было.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
05.06.2011, 09:38     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #7
Нет освобождения памяти.
vector.clear не вызывает удаление объектов по указателю.
DWand
13 / 13 / 1
Регистрация: 23.04.2011
Сообщений: 99
05.06.2011, 10:02  [ТС]     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #8
Цитата Сообщение от gooseim Посмотреть сообщение
#pragma once
Добавил и ошибка исчезла! gooseim, вы волшебник =))))

Deviaphan, как вы, надеюсь, заметили проект еще готов. До очистки памяти еще не дошел, тем более что ее выделение у меня на тот момент еще не работало. Спасибо, что напомнили.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
05.06.2011, 10:10     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #9
Зер гуд.) Тогда ещё напомню, что очистку памяти надо писать сразу после написания её выделения. Или даже до этого.) Что бы потом не было мучительно больно...
DWand
13 / 13 / 1
Регистрация: 23.04.2011
Сообщений: 99
05.06.2011, 13:34  [ТС]     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
=)

Я вот чем дальше, тем больше убеждаюсь в необходимости первоначального тщательного проектирования программы, перед ее написанием. И чем сложнее программа, тем тщательнее она должна быть продумана, дабы не было мучительно больно и досадно, когда придется переписывать сотни строк из-за какого-то просчета при проектировании =)
Deviaphan
05.06.2011, 16:54
  #11

Не по теме:

Держи плюсик за умную мысль.)))

gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
05.06.2011, 17:32     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #12
Цитата Сообщение от Deviaphan Посмотреть сообщение

Не по теме:

Держи плюсик за умную мысль.)))

И от меня тоже. Не смотря на то, что опыт программирования больше 15 лет, до сих пор наступаю на эти грабли.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
05.06.2011, 17:39     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #13
Бывает сложно убедить себя в сложности задачи и не ринуться кодить.)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2011, 19:22     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *"
Еще ссылки по теме:

C++ При компиляции кода вылазит ошибка "error C2027: use of undefined type 'SldWorks'"
C++ Ошибка: "does not name a type"
C++ Ошибка "missing type specifier - int assumed" В шаблоне класса
Argument of type char is incompatible with parameter of type char * C++
Ошибка "binary '==': no operator found which takes a left-hand operand of type" C++

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

Или воспользуйтесь поиском по форуму:
DWand
13 / 13 / 1
Регистрация: 23.04.2011
Сообщений: 99
05.06.2011, 19:22  [ТС]     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #14
=)
Дописал наконец программу. Работает хорошо. Память очищается )
Еще раз спасибо всем, кто, можно сказать, принял участие в этом проекте )
Удачи Вам в ваших начинаниях )
Yandex
Объявления
05.06.2011, 19:22     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *"
Ответ Создать тему
Опции темы

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