Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция, невидима... 
V
    Опции темы
FelikZ
Дата 1.6.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



Привет! Помогите получить доступ к функции "T* A::Func()" из класса "B", потому как у меня ругается при попытке обратиться к ней... видимо изза плохого знания шаблонов :(

Код

#include "stdafx.h"
#include <iostream>
using namespace std;

template<typename T>
class A
{
protected:
    T *_t;
public:
    A()
    {
        _t = new T;
    }

    T* Func()
    {
        return _t;
    }

    virtual int Func(T* t)
    {
        if(t == NULL)
            return -1;
        _t = t;
        return 0;
    }
};

class B:
    public A<int>
{
public:
    B()
    {
    }

    virtual int Func(int* t)
    {
        _t = t;
        return 0;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    B b;
    int z = 0;            
    b.Func(&z);        //OK
    int a = b.Func();    //error C2660: 'B::Func' : function does not take 0 arguments
    
    return 0;
}





--------------------
user posted image
PM WWW ICQ Skype   Вверх
Fazil6
Дата 1.6.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(FelikZ @  1.6.2007,  12:58 Найти цитируемый пост)
Привет! Помогите получить доступ к функции "T* A::Func()" из класса "B", потому как у меня ругается при попытке обратиться к ней...

в класе B у тебя  int Func(int* t) и поэтому он требует передачу аргумента в функцию
PM MAIL   Вверх
zkv
Дата 1.6.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(FelikZ @  1.6.2007,  12:58 Найти цитируемый пост)
получить доступ к функции "T* A::Func()" из класса "B"

Код

int *a = b.A<int>::Func();

но я бы такие конструкции не стал употреблять вне методов класса smile
PM MAIL   Вверх
v_nikolaev
Дата 1.6.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 6.5.2007

Репутация: нет
Всего: нет



Цитата(zkv @ 1.6.2007,  13:10)
Цитата(FelikZ @  1.6.2007,  12:58 Найти цитируемый пост)
получить доступ к функции "T* A::Func()" из класса "B"

Код

int *a = b.A<int>::Func();

но я бы такие конструкции не стал употреблять вне методов класса smile

а почему всё же нужно явно указывать A<int>::, если мы наследуем от A<int> ?
PM MAIL   Вверх
FelikZ
Дата 1.6.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



zkv, 
Цитата(v_nikolaev @  1.6.2007,  16:41 Найти цитируемый пост)
а почему всё же нужно явно указывать A<int>::, если мы наследуем от A<int> ?

???


--------------------
user posted image
PM WWW ICQ Skype   Вверх
threef
Дата 1.6.2007, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Из-за того, что используется виртуальный метод с тем же именем. Он перекрывает метод базового класса.
PM MAIL   Вверх
FelikZ
Дата 1.6.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



zkv, threef, +1


--------------------
user posted image
PM WWW ICQ Skype   Вверх
archimed7592
Дата 1.6.2007, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



суть даже не в перекрытие базового метода, а в скрытии имён... как только в B перекрывается одна из версий Func, все остальные функции с тем же именем становятся просто не видны в производном классе


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.