Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите плз(разделение на файлы и наследование), Непонятно что-то .не разобраться никак. 
V
    Опции темы
fuckingniger
Дата 4.10.2010, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



прочитал про наследование. решил протестировать программкой свои знания + разделить на много файлов.Скорее всего в разделении что -то и напутал - никак не получается исправить.Думаю кто ппонимает не трудно будет помочь
итак код:
class1.h
Код

class class1//класс сложения
{
protected:
    int x1,x2;
    int inc (int a);
public:
    class1(int a ,int  b):x1(a),x2(b)
    {}
    class1():x1(0),x2(0)
    {}
    int sum(int a, int b);
};

class1.cpp
Код

# include <iostream>
# include "class1.h"

int class1::sum(int a, int b)
{
    int s;
    x1=a;
    x2=b;
    s=x1+x2;
    return s;
}
int class1::inc(int a)
{
    return (a+1);
}

class2.h
Код

class class2//класс умножения
{
protected:
    int x1,x2;
    int comp_x_2(int a);
public:
    class2(int a ,int  b):x1(a),x2(b)
    {}
    class2():x1(0),x2(0)
    {}
    int composition(int a, int b);
};

class2.cpp
Код

# include <iostream>
# include "class2.h"
int class2::comp_x_2(int a)
{
    return (a*2);
}
int class2::composition(int a, int b)
{
    return a*b;
}

class3.h
Код

# include "class1.h"
# include "class2.h"

class class3:public class1, public class2
{
public:
    class3():class1(),class2()
    {}
    class3(int a, int b, int c, int d):class1(a,b), class2(c,d)
    {}
    int substraction(int a,int b);
};

class3.cpp
Код

# include <iostream>
# include "class3.h"

int class3::substraction(int a,int b)
{
    return (a-b);
}

main.cpp
Код

# include <iostream>
# include "class1.h"
# include "class2.h"
# include "class3.h"
using namespace std;

int main()
{
    return 0;
}



а вот ошибки - следующие:
Код

1>main.cpp
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\класс.3 файла.наседование(1 раз - тест)\class1.h(2) : error C2011: 'class1' : 'class' type redefinition
1>        c:\documents and settings\admin\мои документы\visual studio 2008\projects\класс.3 файла.наседование(1 раз - тест)\class1.h(2) : see declaration of 'class1'
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\класс.3 файла.наседование(1 раз - тест)\class2.h(2) : error C2011: 'class2' : 'class' type redefinition
1>        c:\documents and settings\admin\мои документы\visual studio 2008\projects\класс.3 файла.наседование(1 раз - тест)\class2.h(2) : see declaration of 'class2'
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\класс.3 файла.наседование(1 раз - тест)\class3.h(4) : error C2504: 'class1' : base class undefined
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\класс.3 файла.наседование(1 раз - тест)\class3.h(5) : error C2504: 'class2' : base class undefined
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\класс.3 файла.наседование(1 раз - тест)\class3.h(8) : error C2614: 'class3' : illegal member initialization: 'class2' is not a base or member
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\класс.3 файла.наседование(1 раз - тест)\class3.h(8) : error C2614: 'class3' : illegal member initialization: 'class1' is not a base or member
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\класс.3 файла.наседование(1 раз - тест)\class3.h(10) : error C2614: 'class3' : illegal member initialization: 'class2' is not a base or member
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\класс.3 файла.наседование(1 раз - тест)\class3.h(10) : error C2614: 'class3' : illegal member initialization: 'class1' is not a base or member
1>Build log was saved at "file://c:\Documents and Settings\Admin\Мои документы\Visual Studio 2008\Projects\Класс.3 файла.наседование(1 раз - тест)\Debug\BuildLog.htm"
1>Класс.3 файла.списки инициализации.наседование(1 раз - тест) - 8 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========



Добавлено через 12 минут и 29 секунд
ошибки порезало - вот на самом деле какие:
Код


 : error C2011: 'class1' : 'class' type redefinition
 : see declaration of 'class1'
: error C2011: 'class2' : 'class' type redefinition
: see declaration of 'class2'
 error C2504: 'class1' : base class undefined
 error C2504: 'class2' : base class undefined
 error C2614: 'class3' : illegal member initialization: 'class2' is not a base or member
 : error C2614: 'class3' : illegal member initialization: 'class1' is not a base or member
 : error C2614: 'class3' : illegal member initialization: 'class2' is not a base or member
: error C2614: 'class3' : illegal member initialization: 'class1' is not a base or member
- 8 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


PM MAIL   Вверх
fuckingniger
Дата 4.10.2010, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



я тут попробовал class3 в main не подключать - заработало...видимо что то в class3 я напутал но не понять мне - замучался уже
PM MAIL   Вверх
mes
Дата 4.10.2010, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



см. стражи включения


--------------------
PM MAIL WWW   Вверх
Crafty
Дата 4.10.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



fuckingniger,  у вас class1.h и class2.h повторно подключаются в class3.h и из-за этого получается переопределение этих классов.
Используйте гварды чтобы такого не было:

Код

#ifndef CLASS1_H
#define CLASS_H
class class1//класс сложения
{
protected:
    int x1,x2;
    int inc (int a);
public:
    class1(int a ,int  b):x1(a),x2(b)
    {}
    class1():x1(0),x2(0)
    {}
    int sum(int a, int b);
};
#endif

Так для всех *.h файлов.

Это сообщение отредактировал(а) Crafty - 4.10.2010, 17:58
PM MAIL   Вверх
fuckingniger
Дата 4.10.2010, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



мммм...а повторно относительно чего?

З.Ы.не слышал ни разу про такие штуки
PM MAIL   Вверх
Crafty
Дата 4.10.2010, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



fuckingniger, в class3.h вы подключаете два заголовка class1.h и class2.h, а потом в main.cpp подключаете class1.h, class2.h и class3.h(к-рый уже содержит подключение class1.h и class2.h).
То есть вы переопределяете class1 и class2.

Это сообщение отредактировал(а) Crafty - 4.10.2010, 15:04
PM MAIL   Вверх
fuckingniger
Дата 4.10.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



Crafty
а использование 
#ifndef CLASS1_H
#define CLASS1_H

является лучшим способом или это плохой стиль программирования?
PM MAIL   Вверх
Crafty
Дата 4.10.2010, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



fuckingniger, лучшим.
PM MAIL   Вверх
mes
Дата 4.10.2010, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(fuckingniger @  4.10.2010,  14:16 Найти цитируемый пост)
является лучшим способом или это плохой стиль программирования? 

единственным стандартным 


--------------------
PM MAIL WWW   Вверх
fuckingniger
Дата 4.10.2010, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



щас тогда попробую
PM MAIL   Вверх
mes
Дата 4.10.2010, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(mes @  4.10.2010,  15:38 Найти цитируемый пост)
единственным стандартным  

для студии можно использовать не переносимое #pragma once 



--------------------
PM MAIL WWW   Вверх
fuckingniger
Дата 4.10.2010, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



Цитата(mes @  4.10.2010,  15:38 )
единственным стандартным  


для студии можно использовать не переносимое #pragma once 



как это сделать?
PM MAIL   Вверх
mes
Дата 4.10.2010, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(fuckingniger @  4.10.2010,  15:54 Найти цитируемый пост)
как это сделать? 

если используете студию и не планируете компилировать исходники другими компиляторами
внесто стражей #ifndef...#endif просто в начале хидера ставьте
Код

#pragma once


это "съэкономит силы", но "убъет" переносимость между компиляторами smile

Добавлено через 3 минуты и 29 секунд
ну а вобще главный совет был дан выше,
вместо того чтоб по частям выспрашивать , лучше один раз в гугле :
Цитата(mes @  4.10.2010,  13:52 Найти цитируемый пост)
см. стражи включения 



Это сообщение отредактировал(а) mes - 4.10.2010, 17:02


--------------------
PM MAIL WWW   Вверх
fuckingniger
Дата 4.10.2010, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



а где его писать то  #pragma once?

Добавлено через 3 минуты и 35 секунд
я сделал как сказал  Crafty

но видимо я его не так понял. Изменил по его примеру все cpp файлы в которых описание функций из .h

вот что вышло:

class1.cpp
Код

#ifndef CLASS1_H
#define CLASS1_H
# include <iostream>
# include "class1.h"

int class1::sum(int a, int b)
{
    int s;
    x1=a;
    x2=b;
    s=x1+x2;
    return s;
}
int class1::inc(int a)
{
    return (a+1);
}
#endif

class2.cpp
Код

# ifndef CLASS2_H
# define CLASS2_H
# include <iostream>
# include "class2.h"
int class2::comp_x_2(int a)
{
    return (a*2);
}
int class2::composition(int a, int b)
{
    return a*b;
}
#endif

class3.cpp
Код

# ifndef CLASS3_H
# define CLASS3_H
# include <iostream>
# include "class3.h"

int class3::substraction(int a,int b)
{
    return (a-b);
}
#endif




и кстати ассист не подсвечивал CLASS3_H и тому подобное

PM MAIL   Вверх
fuckingniger
Дата 4.10.2010, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



и вообще имеет ли CLASS2_H итп какую либо смысловую нагрузку или это простое названия которое можно заменить на стопицот???
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0855 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.