12 / 12 / 4
Регистрация: 07.09.2012
Сообщений: 542
1

Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '"

21.04.2014, 22:30. Показов 1607. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
interface Interface
{
        __int32 Read();
};
//---------------------------------------------------------------------------
class Type: public Interface
{
public:
        __int32 Read();
};
C++
1
2
3
4
5
6
7
8
9
10
__int32 Type::Read()
{
return 0;
}
...
//использую примерно так
Interface a;
Type b;
a = b;
a.Read();
выдает ошибку
[Linker Error] Unresolved external 'Interface::Read()' referenced from
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2014, 22:30
Ответы с готовыми решениями:

Ошибка Unresolved external при работе со статическими полями класса
Доброго всем времени суток. Помогите решить вот такую проблемку. Имеется 2 класса: class...

Unresolved external и использование класса находящегося в заголовке
Есть объявление класса библиотеки FTGL - CFont (line 37), и использование его в функции...

Глюк при создание объекта очередного класса? Unresolved external
Помню я раньше помог кому - то эту проблему решить удалением obj файлов и пересборкой...но лично...

Ошибка Unresolved external
Вот текст программы:#include <vcl.h> #pragma hdrstop #include "Unit1.h"...

Ошибка Unresolved external
Доброго времени суток! Начал изучать С++. Пример прямо из учебника. Ошибка известная. Но...

12
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.04.2014, 22:36 2
klynxe, для типа Interface метод не реализован. Собственно и экземпляры базового типа создавать нельзя (строка 7).
0
12 / 12 / 4
Регистрация: 07.09.2012
Сообщений: 542
21.04.2014, 22:48  [ТС] 3
Tulosba, А если реализовать, то какой будет вызываться? интерфейса или класса Type?

Добавлено через 1 минуту
Или как по другому можно обратиться к методу, реализованному в разных классах, через одну переменную?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 07:09 4
Цитата Сообщение от klynxe Посмотреть сообщение
Или как по другому можно обратиться к методу, реализованному в разных классах, через одну переменную?
Если через объект производного вызвать метод базового (должен находится в public разделе):
C++
1
2
Type b;
b.Interface::Read();
0
12 / 12 / 4
Регистрация: 07.09.2012
Сообщений: 542
22.04.2014, 17:27  [ТС] 5
Мне надо как раз через интерфейс выполнить функцию подкласса, то есть перегруженную
C++
1
2
3
4
Interface a;
Type b;
a = b;
a.Read(); //вызывается Read() в a, а не переопределенный в Type
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 17:32 6
Базовый класс ничего не знает о производном. Если сделать методы виртуальными, то через указатель на базовый, который связан с объектом производного, можно вызвать метод производного (полиморфизм).
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,686
22.04.2014, 17:33 7
C++
1
2
3
4
Interface *a;
Type b;
a = &b;
a->Read(); //вызывается Read() в a, а не переопределенный в Type
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 17:45 8
Цитата Сообщение от zss Посмотреть сообщение
//вызывается Read() в a, а не переопределенный в Type
Если только Read() не виртуальный.

Добавлено через 2 минуты
zss, запутал.

Добавлено через 58 секунд
Без виртуальности будет вызываться метод базового. ТС нужно наоборот.
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,686
22.04.2014, 17:46 9
Так ТС вроде и просил вызвать невиртуальный метод базового класса.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 17:51 10
Цитата Сообщение от klynxe Посмотреть сообщение
Мне надо как раз через интерфейс выполнить функцию подкласса
...
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,686
22.04.2014, 18:03 11
Ну тогда пусть сделает Read() виртуальным и мой пример сработает.
1
12 / 12 / 4
Регистрация: 07.09.2012
Сообщений: 542
22.04.2014, 18:25  [ТС] 12
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
Interface *a;
Type b;
a = &b;
a->Read(); //вызывается Read() в a, а не переопределенный в Type
Спасибо, сделал виртуальным, помогло, а вот не через ссылки ссылается на методы базового класса, как у меня в начале было
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,686
22.04.2014, 19:40 13
Лучший ответ Сообщение было отмечено klynxe как решение

Решение

Цитата Сообщение от klynxe Посмотреть сообщение
не через ссылки ссылается на методы базового класса
В тот то и смысл полиморфизма:
через указатель на базовый класс вызываем метод производного класса
1
22.04.2014, 19:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2014, 19:40
Помогаю со студенческими работами здесь

Ошибка Unresolved external
Unresolved external "Tform1::" referenced from D://... (путь...) Добавлено через 1 минуту...

Ошибка Unresolved external
Unresolved external 'CategoryFiller::FillAllKeyAudience()' referenced from...

Ошибка Unresolved external . . . from OBJ
Код программы. //--------------------------------------------------------------------------- ...

Ошибка unresolved external referenced from
Я создал класс class Tinf { private: int FKK; int Fnom; void __fastcall SetKK(int...

Что за ошибка Unresolved external ?
Дорогие друзья ,подскажите,часто стала возникать ошибка при компиляции: Unresolved external...

Ошибка Unresolved external symbol
Такой вопрос: есть некий класс с перегрузкой "<<" и конструктором. ... class OOP { public:...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru