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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 542
#1

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

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

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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2014, 22:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Интерфейс класса и ошибка "Unresolved external 'Interface::Read() '" (C++):

Шаблон функции, ошибка "unresolved external symbol" - C++
Ошибки Error 1 error LNK2019: unresolved external symbol "int __cdecl mas(int *,int)" (?mas@@YAHPAHH@Z) referenced in function _main...

Виртуальные классы и ошибка "Error LNK2001: unresolved external symbol" - C++
Решил перелезть с C# на C++. Ну или по крайней мере немного его подучить для самообразования. В C# есть такая замечательная вещь как...

Ошибка при сборке проекта: "error LNK2019: unresolved external symbol" - C++
Все части проекта успешно компилируются , но при сборке появляются ошибки: 1>prakt2.obj : error LNK2019: unresolved external symbol...

Ошибка "unresolved external symbol _WinMain@16" - C++
#include <iostream> //STL #include <deque> #include <algorithm> #include <iterator> using namespace std; int...

Ошибка компоновки "unresolved external symbol" - C++
Всем добрый вечер! Такая вот беда - 1>MyRenderAlgorythms.obj : error LNK2019: unresolved external symbol _glewInit@0 referenced in...

Ошибка при подключении заголовочного файла: "error LNK2019: unresolved external symbol" - C++
Добрый день. Я что то не могу разобраться как работают эти заголовки на с++(вижуал студия). Создал Test.h В нём написал ...

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

Добавлено через 1 минуту
Или как по другому можно обратиться к методу, реализованному в разных классах, через одну переменную?
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 07:09 #4
Цитата Сообщение от klynxe Посмотреть сообщение
Или как по другому можно обратиться к методу, реализованному в разных классах, через одну переменную?
Если через объект производного вызвать метод базового (должен находится в public разделе):
C++
1
2
Type b;
b.Interface::Read();
0
klynxe
10 / 10 / 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
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 17:32 #6
Базовый класс ничего не знает о производном. Если сделать методы виртуальными, то через указатель на базовый, который связан с объектом производного, можно вызвать метод производного (полиморфизм).
0
zss
Модератор
Эксперт С++
6400 / 5966 / 1943
Регистрация: 18.12.2011
Сообщений: 15,357
Завершенные тесты: 1
22.04.2014, 17:33 #7
C++
1
2
3
4
Interface *a;
Type b;
a = &b;
a->Read(); //вызывается Read() в a, а не переопределенный в Type
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 17:45 #8
Цитата Сообщение от zss Посмотреть сообщение
//вызывается Read() в a, а не переопределенный в Type
Если только Read() не виртуальный.

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

Добавлено через 58 секунд
Без виртуальности будет вызываться метод базового. ТС нужно наоборот.
0
zss
Модератор
Эксперт С++
6400 / 5966 / 1943
Регистрация: 18.12.2011
Сообщений: 15,357
Завершенные тесты: 1
22.04.2014, 17:46 #9
Так ТС вроде и просил вызвать невиртуальный метод базового класса.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2014, 17:51 #10
Цитата Сообщение от klynxe Посмотреть сообщение
Мне надо как раз через интерфейс выполнить функцию подкласса
...
0
zss
Модератор
Эксперт С++
6400 / 5966 / 1943
Регистрация: 18.12.2011
Сообщений: 15,357
Завершенные тесты: 1
22.04.2014, 18:03 #11
Ну тогда пусть сделает Read() виртуальным и мой пример сработает.
1
klynxe
10 / 10 / 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
zss
Модератор
Эксперт С++
6400 / 5966 / 1943
Регистрация: 18.12.2011
Сообщений: 15,357
Завершенные тесты: 1
22.04.2014, 19:40 #13
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от klynxe Посмотреть сообщение
не через ссылки ссылается на методы базового класса
В тот то и смысл полиморфизма:
через указатель на базовый класс вызываем метод производного класса
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 19:40
Привет! Вот еще темы с ответами:

Error LNK2001: "unresolved external symbol _main" - C++
вот программа: #include <iostream.h> #include <stdlib.h> #include <time.h> class Mas_2d { public: ...

Как исправить ошибку "Link2001:unresolved external symbol __imp__UuidToStringW@8"? - C++
Ошибка: unresolved external symbol __imp__UuidToStringW@8 Линкую статическую либу, все конфиги прописал, либа есть. Один проект компилит,...

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)" - C++
#include <iostream> #include <cmath> using namespace std; double Akk(double x, double y, double z); int main() { int a, b, c; ...

Unresolved external "fun1 double" - C++
Помогите, не могу понять в чем причина... //--------------------------------------------------------------------------- #include...


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
22.04.2014, 19:40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru