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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2011, 20:24   #1
Lanx
 
Регистрация: 06.04.2011
Сообщений: 8
По умолчанию Ошибка при присвоении объекту производного класса объекта базового класса с исп. явного приведения типов

Доброго времени суток, уважаемые. До невозможности таинственной является для меня ошибка "error C2440: 'type cast' : cannot convert from 'Strings' to 'Digits' " при компиляции некоторой программы в Visual Studio 2010. Уровень информативности среды программирования в описании ошибки напоминает мне школьные годы с их "Ну я просто это не сделал", поэтому кроме форума ничего не оставалось. Гуглить бессмысленно, т.к. я из теории знаю, что никаких проблем быть не должно. Может, они порождены особенностями моих слинкованных классов, не знаю, ибо если эту строчку закомментировать (присвоение объекту объекта), то и компиляция, и отладка проходят успешно(так что по идее ни в реализации наследования, ни в описании самих классов я не ошибся)

Есть базовый класс Strings, его наследуют два класса: Digits и Letters. Вот файлы-члены проекта:
1) Базовый класс Strings:
Код:
class 
 Strings
  {
   public:
    virtual int length (char*);
    virtual char* del (char*, char);
  };
2) Производный класс Digits:
Код:
#include "Base.h"
class
 Digits : public Strings
  {
   public:
	Digits (char*);
    char* a;
	int l;
	int length (char*);
	char* del (char*);
  };
3) Производный клас Letters:
Код:
#include "Derived.h"
class
 Letters : public Strings
  {
   public:
    Letters(char*);
    char* a;
    int l;
    int length (char*);
    char* del (char*);
  };
4) Исполнительный файл:

Код:
#include "BaseLet.h"
#include <iostream>
#include <conio.h>
using namespace std;
Digits::Digits (char* b)
 {
  a = b;
 }
Letters::Letters (char* b)
 {
  a = b;
 }
int Strings::length (char* a)
 {
  int i = 0;
  while (*(a+i) != 0)
   {
	i = i + 1;
   }
  return i;
 }
int Digits::length (char* a)
 {
  int i = 0;
  while (*(a+i) != 0)
   {
	i = i + 1;
   }
  return i;
 }
int Letters::length (char* a)
 {
  int i = 0;
  while ((a+i) != 0)
   {
	i = i + 1;
   }
  return i;
 }
char* Strings::del (char* a, char b)
 {
  int 
   i = 0,
   j = 0;
  char*
   temp;
  while (i <= Strings::length(a))
   {
	if (*(a+i) != b)
	 {
	  *(temp+j) = a [i];
	  j++;
	 }
    i++;
   }
  a = temp;
  return temp;
  cout << "Вот ваша строка, ололо:" << temp;
  _getch();
}
char* Digits::del (char* a)
 {
  int 
   i = 0,
   j = 0;
  char*
   temp;
  while (i <= Strings::length(a))
   {
	if (*(a+i) != '5')
	 {
	  *(temp+j) = a [i];
	  j++;
	 }
    i++;
   }
  a = temp;
  return temp;
  cout << "Вот ваша строка, ололо:" << temp;
  _getch();
 }
char* Letters::del (char* a)
 {
  int 
   i = 0,
   j = 0;
  char*
   temp;
  while (i <= Strings::length(a))
   {
	if (*(a+i) != 'a')
	 {
	  *(temp+j) = a [i];
	  j++;
	 }
    i++;
   }
  a = temp;
  return temp;
  cout << "Вот ваша строка, ололо:" << temp;
  _getch();
 }

int main()
 {
  char* a = "God doesn't exist. Church is only business. Evolution and Big Bang explain everything, but author of this program is so stupid, that I need to repeat it 555.5 times";
  Strings c;
  Digits d(a);
  d = (Digits)c;
}
Строку оставляю такую, с какой у меня ошибка(Может, длина строки, мало ли). Это бред, конечно, но я уже не знаю, из-за чего это может быть, эта ошибка заставляет думать, что я, как однодневный программист, пропустил где-то какую-то точку с запятой (ну, образно). Так что пусть будет именно так, как у меня.

Если убрать d = (Digits)c; то все компилируется и отлаживается (exited with code 0x0), т.е. вообще нет проблем.
Lanx вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обратиться к полям базового класса? Azartov Общие вопросы C/C++ 13 03.07.2011 20:32
Создание своего класса на основе базового TControl Lich87 Общие вопросы C/C++ 1 22.06.2010 18:29
Как в базовом классе описать указатель на объект производного класса? MasterGH Общие вопросы C/C++ 3 16.11.2009 02:55
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54
Присваивание объекту родительского класса объекта дочернего Викдон Общие вопросы Delphi 0 07.02.2009 15:27