Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2011, 19:50   #1
Invisible_
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 14
По умолчанию Использование объектов класса потомка в классе предке

Всем привет! Имеется следующий код:

//A.h
extern vector <ClassB> bVect;

class A
{
protected:
double x,y,z;
public:

void setZ(double z)
{
this->z=z;
}

double getZ()
{
return this->z;
}

double getXFromZ()
{
return x=bVect.at(0).getZ();
}

};


//B.h
class ClassB
{
protected:
double z;
public:

void setZ(double z)
{
this->z=z;
}

double getZ()
{
return this->z;
}

};


//main.cpp
#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;

#include "B.h"
#include "A.h"

vector <ClassB> bVect;

int _tmain(int argc, _TCHAR* argv[])
{

ClassB objB;
A objA;

objB.setZ(10);
bVect.push_back(objB);

cout << objA.getXFromZ() << endl;

system("pause");
return 0;
}

Все работает правильно. У нас есть вектор, содержащий объект класса ClassB. Мы добавляем в пустой вектор объект того же класса, содержащий в поле Z число 10. Потом через метод в классе А мы выводим это число.

Проблема возникает тогда, когда мы класс ClassB делаем потомком класса А:

//A.h
class ClassB;
extern vector <ClassB> bVect;

class A
{
protected:
double x,y,z;
public:

void setZ(double z)
{
this->z=z;
}

double getZ()
{
return this->z;
}

double getXFromZ()
{
return x=bVect.at(0).getZ();
}

};


//B.h
class ClassB: public A
{/*
protected:
double z;
public:

void setZ(double z)
{
this->z=z;
}

double getZ()
{
return this->z;
}
*/
};

//main.cpp
#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;

#include "A.h"
#include "B.h"


vector <ClassB> bVect;

int _tmain(int argc, _TCHAR* argv[])
{

ClassB objB;
A objA;

objB.setZ(10);
bVect.push_back(objB);

cout << objA.getXFromZ() << endl;

system("pause");
return 0;
}


Компилятор выдает ошибку:
Ошибка 1 error C2027: использование неопределенного типа ClassB"
Ошибка 2 error C2228: выражение слева от ".getZ" должно представлять класс, структуру или объединение


Что нужно сделать, чтобы все заработало?
Invisible_ вне форума Ответить с цитированием
Старый 05.04.2011, 23:40   #2
Napkin
Пользователь
 
Аватар для Napkin
 
Регистрация: 09.12.2009
Сообщений: 25
По умолчанию

Попробуйте в файле A.h подключить ваш B.h.
Я думаю из-за этой части кода:
Код:
//A.h
class ClassB;
extern vector <ClassB> bVect;
и возникает ошибка 1, а вслед за ней и вторая.
Удел сильных - уделывать слабых
Napkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание объектов в классе V@mpire Общие вопросы C/C++ 3 30.05.2010 21:34
Как в базовом классе описать указатель на объект производного класса? MasterGH Общие вопросы C/C++ 3 16.11.2009 02:55
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54
Использование MediaPlayer в своем классе. Вадим Буренков Мультимедиа в Delphi 5 03.04.2009 17:16
Использование String^ в классе Selebro Общие вопросы C/C++ 2 01.12.2008 11:13