Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Melany
21 / 4 / 0
Регистрация: 05.07.2015
Сообщений: 126
#1

Ошибка компиляции - "класс" : базовый класс не определен - C++

14.02.2016, 13:43. Просмотров 388. Ответов 12
Метки нет (Все метки)

Помогите пожалуйста,
у меня в проекте есть несколько классов, которые имеют отдельные header и implementations, когда я их всех объединяю, то почему-то класс -потомок не видит своего родителя, но в начале, когда присутствуют только они - то все прекрасно видно кто базовый а кто потомок, когда же я подключаю остальные классы то тут возникает данная проблема,

error 2504 - base class is underfined

Это родительский класс
//Header
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
#pragma once
#ifndef Goods_exist
#define Goods_exist
#include<iostream>
#include<string>
#include "Time.h"
#include"Visitor.h"
#include"Warehouse.h"
 
using namespace std;
 
 
extern class Goods
{
protected:
    string name;
    int pieces;
    string productionCountry;
    Time expireDate;
    string unitOfMeasure;
public:
    virtual void AddMe(class Visitor&v)=0;
    Goods():name("none"), pieces(0), unitOfMeasure("kg"), productionCountry("none"), expireDate(){}
    void SetName(string a);
    void SetPieces(int a);
    void SetCountryOfProduction(string a);
    void SetUnitOfMeasure(string a);
    void SetDate(int y, int m, int d);
    string GetName();
    int GetPieces();
    string GetCountryOfProduction();
    Time& GetDate();
    string GetUnitOfMeasure();
    void SetGoods(string _name, int _pieces, string _productioCountry, string _unitOfMeasure, int y, int m, int d);
    virtual ~Goods(void);
};
 
#endif
//Header потомка

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
 
#ifndef C
#define C
 
#include"Goods.h"
class Visitor;
 
class ConstructMaterials:public Goods
{
public:
    ConstructMaterials(void);
    void AddMe(Visitor& v);
    friend ostream& operator<<(ostream&os, ConstructMaterials& ob);
    ~ConstructMaterials(void);
};
 
#endif

//main

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma ones
 
 
#include"ConstructMaterials.h"
#include"Goods.h"
 
 
 
int main()
{
 
    ConstructMaterials cement;
    cement.SetGoods("cement", 20, "Poland", "tn", 2016, 1, 25);
    cout<<cement;
}


Заренее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2016, 13:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка компиляции - "класс" : базовый класс не определен (C++):

typeid определяет тип указателя на базовый класс, как тип "базовый класс". Вне зависимости от присвоенного ему значения - C++
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;typeinfo&gt; using...

Создать базовый класс "Массив" и класс-наследник "Матрица" - C++
Добрый день! такой вопрос, как задать двумерный массив и заполнить его рандомными числами. и как его реализовать используя абстрактные...

Реализовать базовый класс "Футбольная команда" и класс-наследник с методами консольного ввода/вывода - C++
Составить программу на языке С++, в которой описывается класс (с добавлением наследуемого подкласса) с методами ввода с клавиатуры и вывода...

Базовый класс "Источник напряжения", производные классы "Цепь" и "Аккумулятор" - C++
Дали задачу по программированию: составить класс &quot;Источник напряжения&quot;, для которого нужно реализовать два производных класса: &quot;Цепь&quot; и...

Базовый класс "многоугольник" и производные классы "треугольник" и "прямоугольник" - C++
Не могу понять как реализовать данное задание. Создать 1 базовый класс и несколько производных.Все небольшие ф-ии сделать встроенными...

Ошибка при компиляции:"C2955 "Tree": для использования класс шаблон требуется список аргументов шаблон" - C++
Есть класс бинарного дерева, в нем структура. Класс - Tree, структура - list(листик, а не список). При компиляции выдает...

12
zss
Модератор
Эксперт С++
6516 / 6078 / 2001
Регистрация: 18.12.2011
Сообщений: 15,807
Завершенные тесты: 1
14.02.2016, 14:13 #2
Цитата Сообщение от Melany Посмотреть сообщение
extern class Goods
Что здесь делает слово extern?

Добавлено через 1 минуту
Цитата Сообщение от Melany Посмотреть сообщение
#include"ConstructMaterials.h"
#include"Goods.h"
Поменяйте местами эти строки
1
Melany
21 / 4 / 0
Регистрация: 05.07.2015
Сообщений: 126
14.02.2016, 14:24  [ТС] #3
Что здесь делает слово extern?

extern я вставила сюда, так как это описывалось как одна из возможным причин такого поведениякомпилятора:
"класс" : базовый класс не определен
Базовый класс объявлен, но так и не определен. Возможные причины:
Пропущен включаемый файл.
Внешний базовый класс объявлен без модификатора extern.

//Поменяйте местами эти строки

Когда я меняю строки местами, то ситуация не изменяется, а метод cement.SetGoods(,,,) становиться не видимым для класса потомка,,
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
14.02.2016, 16:27 #4
C++
1
virtual void AddMe(class Visitor&v)=0;
wtf? Зачем 'class'?

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
#pragma once
#ifndef Goods_exist
#define Goods_exist
#include<iostream>
#include<string>
#include "Time.h"
#include"Warehouse.h"
//Включение Visitor.h - к черту
using namespace std;//В заголовочном файле? Вы на костер захотели?
 
class Visitor ; //Forward declaration
class Goods //убран extern
{
protected:
    string name;
    int pieces;
    string productionCountry;
    Time expireDate;
    string unitOfMeasure;
public:
    virtual void AddMe(Visitor&v)=0;//убран class
    Goods():name("none"), pieces(0), unitOfMeasure("kg"), productionCountry("none"), expireDate(){}
    void SetName(string a);
    void SetPieces(int a);
    void SetCountryOfProduction(string a);
    void SetUnitOfMeasure(string a);
    void SetDate(int y, int m, int d);
    string GetName();
    int GetPieces();
    string GetCountryOfProduction();
    Time& GetDate();
    string GetUnitOfMeasure();
    void SetGoods(string _name, int _pieces, string _productioCountry, string _unitOfMeasure, int y, int m, int d);
    virtual ~Goods(void);
};
 
#endif
Ну и определения всего этого не забыть сделать.
1
Melany
21 / 4 / 0
Регистрация: 05.07.2015
Сообщений: 126
14.02.2016, 16:37  [ТС] #5
Croessmah, Спасибо, но это не изменило проблемы,,, если раньше было 2 ошибки по поводу класса, то в таком варианте - 9:
Error 761 error C2027: use of undefined type 'Visitor'
Error 1268 error C2065: 'ConstructMaterials' : undeclared identifier
Error 762 error C2228: left of '.AddElem' must have class/struct/union
Error 253 error C2504: 'Goods' : base class undefined
Error 760 error C2923: 'std::vector' : 'ConstructMaterials' is not a valid template type argument for parameter '_Ty'
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
14.02.2016, 16:41 #6
Melany, экстрасенсы в отпуске,
что там у Вас еще понаписано - неизвестно.
0
Melany
21 / 4 / 0
Регистрация: 05.07.2015
Сообщений: 126
14.02.2016, 17:44  [ТС] #7
Croessmah, Понимаю, что все это звучит глупо, но не могу разобраться в этих трех соснах,,,
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.02.2016, 18:46 #8
Цитата Сообщение от Melany Посмотреть сообщение
не могу разобраться в этих трех соснах,,,
Выкладывай проект в архиве. Ковыряться в обрывках кодов не вариант.
1
Melany
21 / 4 / 0
Регистрация: 05.07.2015
Сообщений: 126
14.02.2016, 19:33  [ТС] #9
Tulosba,

Во вложении мой проект - в котором и есть проблемы ,,,,

Спасибо Вам заранее огромное!!!
0
Вложения
Тип файла: rar JDEdwards.rar (1.82 Мб, 2 просмотров)
nd2
2384 / 1973 / 691
Регистрация: 29.01.2016
Сообщений: 6,421
14.02.2016, 19:59 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
...
2
Вложения
Тип файла: rar JDEdwards.rar (4.16 Мб, 4 просмотров)
Melany
21 / 4 / 0
Регистрация: 05.07.2015
Сообщений: 126
14.02.2016, 20:09  [ТС] #11
nd2, Спасибо огромное!!! Сейчас добавлю сюда свои доработки,

Спасибо еще раз огромное!!!!
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.02.2016, 20:17 #12
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Основная проблема из-за наличия ненужного #include"Warehouse.h" внутри Goods.h. Это порождало ситуацию, при которой #include"Goods.h" внутри ConstructMaterials.h фактически не включал определение класса Goods. И определение
C++
1
class ConstructMaterials:public Goods
получалось невалидным. О чем и говорил компилятор:
error C2504: 'Goods': base class undefined
Попутно хочу заметить, что однобуквенные идентификаторы для lock guard не лучшая идея. И наличие одновременно с этим pragma once всё-таки излишне. Лучше оставить что-то одно.
В общем, избегай лишних зависимостей (включения ненужных файлов) и всё будет хорошо.
2
Melany
21 / 4 / 0
Регистрация: 05.07.2015
Сообщений: 126
14.02.2016, 20:30  [ТС] #13
Tulosba, Спасибо Вам огромное!!!
0
14.02.2016, 20:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2016, 20:30
Привет! Вот еще темы с ответами:

Определить базовый класс "Матрица" и класс-потомок "Треугольная матрица" - C++
Нужно определить класс &quot;матрица&quot; с возможностью динамического выделения и освобождения памяти, наполнения матрицы, сохранения и чтения из...

Абстрактный базовый класс "звонок" с виртуальной функцией "стоимость" - C++
Помогите пожалуйста очень надо (классы это не мое) полиморфизм Поступающие звонки оператор классифицирует (т.е. в какой город, регион, ...

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число" - C++
Ткма работы создать класс pair (пара чисел); определить метод перемножения полей и операцию сложения пар (a,b)+(c,d) =(a+b,c+d)...

Не определен базовый класс - C++
Доброго времени суток. Столкнулся с проблемой при наследовании, и не могу разобраться, как решить. Есть базовый класс SPoint и два...


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

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

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