Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
21.04.2014, 22:30     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #1
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
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.04.2014, 22:36     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #2
klynxe, для типа Interface метод не реализован. Собственно и экземпляры базового типа создавать нельзя (строка 7).
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
21.04.2014, 22:48  [ТС]     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #3
Tulosba, А если реализовать, то какой будет вызываться? интерфейса или класса Type?

Добавлено через 1 минуту
Или как по другому можно обратиться к методу, реализованному в разных классах, через одну переменную?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 07:09     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #4
Цитата Сообщение от klynxe Посмотреть сообщение
Или как по другому можно обратиться к методу, реализованному в разных классах, через одну переменную?
Если через объект производного вызвать метод базового (должен находится в public разделе):
C++
1
2
Type b;
b.Interface::Read();
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
22.04.2014, 17:27  [ТС]     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #5
Мне надо как раз через интерфейс выполнить функцию подкласса, то есть перегруженную
C++
1
2
3
4
Interface a;
Type b;
a = b;
a.Read(); //вызывается Read() в a, а не переопределенный в Type
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 17:32     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #6
Базовый класс ничего не знает о производном. Если сделать методы виртуальными, то через указатель на базовый, который связан с объектом производного, можно вызвать метод производного (полиморфизм).
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
22.04.2014, 17:33     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #7
C++
1
2
3
4
Interface *a;
Type b;
a = &b;
a->Read(); //вызывается Read() в a, а не переопределенный в Type
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 17:45     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #8
Цитата Сообщение от zss Посмотреть сообщение
//вызывается Read() в a, а не переопределенный в Type
Если только Read() не виртуальный.

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

Добавлено через 58 секунд
Без виртуальности будет вызываться метод базового. ТС нужно наоборот.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
22.04.2014, 17:46     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #9
Так ТС вроде и просил вызвать невиртуальный метод базового класса.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 17:51     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #10
Цитата Сообщение от klynxe Посмотреть сообщение
Мне надо как раз через интерфейс выполнить функцию подкласса
...
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
22.04.2014, 18:03     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #11
Ну тогда пусть сделает Read() виртуальным и мой пример сработает.
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
22.04.2014, 18:25  [ТС]     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #12
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
Interface *a;
Type b;
a = &b;
a->Read(); //вызывается Read() в a, а не переопределенный в Type
Спасибо, сделал виртуальным, помогло, а вот не через ссылки ссылается на методы базового класса, как у меня в начале было
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 19:40     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '"
Еще ссылки по теме:

C++ Виртуальные классы и ошибка "Error LNK2001: unresolved external symbol"
C++ Unresolved external "fun1 double"
C++ Ошибка при подключении заголовочного файла: "error LNK2019: unresolved external symbol"

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
22.04.2014, 19:40     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" #13
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от klynxe Посмотреть сообщение
не через ссылки ссылается на методы базового класса
В тот то и смысл полиморфизма:
через указатель на базовый класс вызываем метод производного класса
Yandex
Объявления
22.04.2014, 19:40     Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '"
Ответ Создать тему
Опции темы

Текущее время: 04:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru