Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/19: Рейтинг темы: голосов - 19, средняя оценка - 5.00
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99

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

04.06.2011, 14:21. Показов 4165. Ответов 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);
}
Что тут не правильно? Уже всю голову сломал ((
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.06.2011, 14:21
Ответы с готовыми решениями:

Ошибка: argument of type "char *" is incompatible with parameter of type "LPCWSTR"
Помогите, пожалуйста, исправить ошибку в программе. #include &lt;iostream&gt; #include &quot;stdio.h&quot; #include &quot;windows.h&quot; #include...

Argument of type char is incompatible with parameter of type char *
Столкнулся с ошибкой, не получается никак исправить #define DUTIES 100 class POSITIONDLL_API Position { private: char...

argument of type "const char *" is incompatible with parameter of type "LPCWSTR"
static std::vector&lt;std::string&gt; v; std::vector&lt;std::string&gt;::iterator it; ... TextOut(hdc, 0, y, it-&gt;data(), it-&gt;length()); ...

13
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
04.06.2011, 18:26
C++
1
_courses[course - 1]->addGroup(newGroup);
Добавлено через 12 минут
парю
невнимательно посмотрел
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
04.06.2011, 19:02  [ТС]
Я не понимаю чем ему не нравится CGroup *
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
04.06.2011, 20:06
Вроде ошибок нет. Покажите полный код.
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
05.06.2011, 00:04  [ТС]
Это то, что успел сделать до возникновения ошибки:

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

Файл 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();
}
Как-то так. Догадываюсь что далеко не самый оптимальный способ, но что получилось...
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
05.06.2011, 00:23
Я не поленился собрать проект из ваших файлов. У меня вылезли две ошибки при редефайне классов CGroup и CStudent.
Добавил в начало student.h и начало group.h строку
C++
1
#pragma once
и ошибок больше не было.
1
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
05.06.2011, 09:38
Нет освобождения памяти.
vector.clear не вызывает удаление объектов по указателю.
1
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
05.06.2011, 10:02  [ТС]
Цитата Сообщение от gooseim Посмотреть сообщение
#pragma once
Добавил и ошибка исчезла! gooseim, вы волшебник =))))

Deviaphan, как вы, надеюсь, заметили проект еще готов. До очистки памяти еще не дошел, тем более что ее выделение у меня на тот момент еще не работало. Спасибо, что напомнили.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
05.06.2011, 10:10
Зер гуд.) Тогда ещё напомню, что очистку памяти надо писать сразу после написания её выделения. Или даже до этого.) Что бы потом не было мучительно больно...
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
05.06.2011, 13:34  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

=)

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

Не по теме:

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

0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
05.06.2011, 17:32
Цитата Сообщение от Deviaphan Посмотреть сообщение

Не по теме:

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

И от меня тоже. Не смотря на то, что опыт программирования больше 15 лет, до сих пор наступаю на эти грабли.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
05.06.2011, 17:39
Бывает сложно убедить себя в сложности задачи и не ринуться кодить.)))
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
05.06.2011, 19:22  [ТС]
=)
Дописал наконец программу. Работает хорошо. Память очищается )
Еще раз спасибо всем, кто, можно сказать, принял участие в этом проекте )
Удачи Вам в ваших начинаниях )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.06.2011, 19:22
Помогаю со студенческими работами здесь

Argument of type "lpfn" is incompatible with parameter of type "HOOKPROC"
Использую SetWindowsHookEx function. Не понимаю почему возникает такая ошибка.

Error: incompatible type for argument 1 of ‘pow’
в этой программе: #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt; int main()

Ошибка error: cannot initialize a parameter of type 'int (*)[6]' with an lvalue of type 'int [this->Vi][this->Vi]'
Добрый вечер. Как решить ошибку error: cannot initialize a parameter of type 'int (*)' with an lvalue of type 'int ' Вот сам код ...

Ошибка: "error: format specifies type 'long double' but the argument has type 'double *'"
При компиляции моей программы мне выбивает ошибку &quot;error: format specifies type 'long double' but the argument has type 'double *' &quot; я...

Ошибка Incompatible type
помогите , менял я integer на extended и все ровно туже ошибку выдавала unit Unit3; interface uses Windows, Messages,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru