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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с параметром по умолчанию. Для конструктора в шаблоне класса 
V
    Опции темы
SaDFromSpb
Дата 31.5.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Текст хидера:
Код
#include <iostream>

template<class Tostream = std::ostream> 
class Value
{ 
public:
  
  Value(Tostream& _out = std::cout);
  
  void print(int i);
  
private:
  Tostream& out;
};

Текст сишника:
Код
#include "main.hpp"


template<class Tostream>
Value<Tostream> :: Value(Tostream& _out) : out(_out) {};

template<class Tostream>
void Value<Tostream> :: print(int i) {
  out << i << std::endl;
};

int main(int argc, char* argv[])
{

  Value<> val(std::cout);
  val.print(34);

  return 0;
} 

Если в 15 строке убрать параметр для конструктора, то выпрыгивает ошибка в строке 16:
Цитата
error: request for member `print' in `val', which is of
   non-aggregate type `Value<std::basic_ostream<char, std::char_traits<char> >
   > ()()'

А его использовать так хочется! 


--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
DeadSoul
Дата 31.5.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

Value<std::cout> val;


Шаблон совсем без параметров не бывает. 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
bsa
Дата 31.5.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Судя по всему, компилятору не удается определить тип шаблона класса, если ты используешь параметр конструктора по-умолчанию. 
PM   Вверх
MAKCim
Дата 31.5.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

Value<std::cout> val;

Это не правильно
в шаблонах нельзя использовать параметры типа "объект класса"
SaDFromSpb
какой компилятор?
у меня все компилится (g++ 4.0.2)

Добавлено @ 16:52 
Цитата

Судя по всему, компилятору не удается определить тип шаблона класса, если ты используешь параметр конструктора по-умолчанию.  

а тут нечего определять
раз <> значит Tostream = std::ostream, аргумент конструктора этому соответсвует 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bsa
Дата 31.5.2006, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Это тебе нечего определять. А компилятор не такой умный.  smile  
PM   Вверх
SaDFromSpb
Дата 31.5.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DeadSoul, но ведь работает же...  Я, кстати, пробовал несколько параметров для шаблона делать. Не помогает.

MAKCim,
компилятор g++ (GCC) 3.3.3 20040412 (Red Hat Linux 3.3.3-7).

bsa, тебе же говорят, что компилится.

Глюк компилятора чтоли... 

Это сообщение отредактировал(а) SaDFromSpb - 31.5.2006, 17:06


--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
MAKCim
Дата 31.5.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

А компилятор не такой умный.

его проблемы  smile 
а вообще не вижу я разницы между
Код

Value<std::ostream> a;

и
Код

Value<> a;

да и Comeau согласен тоже (хотя он шибко умный...  smile )
 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
SaDFromSpb
Дата 31.5.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Блин! Я понял, что я ламмер!!!  smile 
Я когда убирал параметр я сами скобочки оставил!  smile
Бывают же ляпы...
Всем ссори за беспокойство 


--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
Earnest
Дата 1.6.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Именно, а
Код

Value<> val();

это объявление функции val, которая возвращает Value<std::ostream>...
Отсюда и последующая ругань компилятора.
Есть такая милая фича у C++... 


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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