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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
DWand
 Аватар для DWand
13 / 13 / 1
Регистрация: 23.04.2011
Сообщений: 99
04.06.2011, 14:21     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #1
Задача состоит в том, чтобы на основе текстовых файлов сделать подобие базы данных.
Есть 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
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
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
 Аватар для 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
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
04.06.2011, 20:06     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #4
Вроде ошибок нет. Покажите полный код.
DWand
 Аватар для 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
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
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++
 Аватар для Deviaphan
1283 / 1217 / 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
 Аватар для 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++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
05.06.2011, 10:10     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #9
Зер гуд.) Тогда ещё напомню, что очистку памяти надо писать сразу после написания её выделения. Или даже до этого.) Что бы потом не было мучительно больно...
DWand
 Аватар для 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
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
05.06.2011, 17:32     Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" #12
Цитата Сообщение от Deviaphan Посмотреть сообщение

Не по теме:

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

И от меня тоже. Не смотря на то, что опыт программирования больше 15 лет, до сих пор наступаю на эти грабли.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 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++ Ошибка в Eclipse "Type Program "make" not found in PATH"
Ошибка: argument of type "char *" is incompatible with parameter of type "LPCWSTR" C++
C++ Ошибка "missing type specifier - int assumed" В шаблоне класса

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

Или воспользуйтесь поиском по форуму:
DWand
 Аватар для 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 *"
Ответ Создать тему
Опции темы

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