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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инстанцирование шаблона, косяк, MinGW32 4.5.2 
V
    Опции темы
Alca
Дата 16.4.2011, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

#include <windows.h>

template<HANDLE hFailValueT>
class CxHandleT {
    public:
        HANDLE m_hHandle;

        CxHandleT()
            : m_hHandle(hFailValueT)
        {
        }
};

int main() {
    CxHandleT<NULL> hHandle;

    return 0;
}

Код

could not convert template argument '0' to 'void*'    Test1.cpp    /Test1/src    line 24
invalid type in declaration before ';' token    Test1.cpp    /Test1/src    line 24


Что не так? Студия компилит нормально

Это сообщение отредактировал(а) Alca - 16.4.2011, 22:17


--------------------
PM WWW ICQ Skype Jabber   Вверх
volatile
Дата 16.4.2011, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



скорей всего поможет. В начале файла, но после инклудов:
Код

#undef NULL
#define NULL ((void*)0)

PM MAIL   Вверх
Alca
Дата 16.4.2011, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

#include <windows.h>

#undef NULL
#define NULL ((void*)0)

template<HANDLE hFailValueT>
class CxHandleT {
    public:
        HANDLE m_hHandle;

        CxHandleT()
            : m_hHandle(hFailValueT)
        {
        }
};

int main() {
    CxHandleT<NULL> hHandle; //<< error

    return 0;
}


Код

a cast to a type other than an integral or enumeration type cannot appear in a constant-expression    Test1.cpp    /Test1/src    line 27    C/C++ Problem
invalid type in declaration before ';' token    Test1.cpp    /Test1/src    line 27    C/C++ Problem
template argument 1 is invalid    Test1.cpp    /Test1/src    line 27    C/C++ Problem



Это сообщение отредактировал(а) Alca - 16.4.2011, 23:45


--------------------
PM WWW ICQ Skype Jabber   Вверх
volatile
Дата 17.4.2011, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Alca, ну фиг его знает, вот здесь говорят что мол gcc это не компилит, и это типа правильно.
а msvc спокойно компилит, и это типа не правильно smile

щаз дядьки-знатоки gcc придут, растолкуют, у меня кроме вечно-неправильного msvc ничего под рукой нет  smile 



PM MAIL   Вверх
xvr
Дата 18.4.2011, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Есть подозрение, что в g++ NULL задефайен как __null

PM MAIL   Вверх
Alca
Дата 18.4.2011, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

Есть подозрение, что в g++ NULL задефайен как __null

так оно и есть, и че делать теперь?


--------------------
PM WWW ICQ Skype Jabber   Вверх
xvr
Дата 18.4.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Alca @  18.4.2011,  19:53 Найти цитируемый пост)
так оно и есть, и че делать теперь? 

Ну дык - задефайнить, как просит:
Код

#include <windows.h>
#undef NULL
#define NULL __null

PM MAIL   Вверх
Alca
Дата 19.4.2011, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

//============================================================================
// Name        : Test1.cpp
// Author      : skynowa
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================


//---------------------------------------------------------------------------
#include <windows.h>
#include <iostream>
using namespace std;
//---------------------------------------------------------------------------
#undef  NULL
#define NULL __null
//---------------------------------------------------------------------------
template<HANDLE hFailValueT>
class CxHandleT {
    public:
        HANDLE m_hHandle;

        CxHandleT()
            : m_hHandle(hFailValueT)
        {
        }
};
//---------------------------------------------------------------------------
int main() {
    CxHandleT<NULL> hHandle; //<< error

    return 0;
};
//---------------------------------------------------------------------------

Код

could not convert template argument '0' to 'void*'    Test1.cpp    /Test1/src    line 30    C/C++ Problem
invalid type in declaration before ';' token    Test1.cpp    /Test1/src    line 30    C/C++ Problem


Добавлено через 21 секунду
Дык, не то  smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
xvr
Дата 20.4.2011, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Alca @  19.4.2011,  23:00 Найти цитируемый пост)
Дык, не то

Увы, мысли кончились  smile 
Один вопрос, а как вы собираетесь ваш CxHandleT<> использовать? Ему кроме NULL в параметр шаблона и передать то нечего  smile 

PM MAIL   Вверх
Alca
Дата 20.4.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

Ему кроме NULL в параметр шаблона и передать то нечего  

INVALID_HANDLE_VALUE

Добавлено через 1 минуту и 39 секунд
что-то вроде этого http://www.codeproject.com/KB/wtl/wtlhandle.aspx


--------------------
PM WWW ICQ Skype Jabber   Вверх
mes
Дата 20.4.2011, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Alca @  20.4.2011,  10:35 Найти цитируемый пост)
INVALID_HANDLE_VALUE 

а зачем передавать NULL и INVALID_HANDLE_VALUE  аргументом шаблона ?
в чем смысл ?

Добавлено через 1 минуту и 38 секунд
Цитата(Alca @  20.4.2011,  10:35 Найти цитируемый пост)
что-то вроде этого http://www.codeproject.com/KB/wtl/wtlhandle.aspx 

а, понятно 


--------------------
PM MAIL WWW   Вверх
Alca
Дата 20.4.2011, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



буду передавать NULL и INVALID_HANDLE_VALUE в конструктор ..

Это сообщение отредактировал(а) Alca - 20.4.2011, 11:43


--------------------
PM WWW ICQ Skype Jabber   Вверх
xvr
Дата 20.4.2011, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Alca @  20.4.2011,  11:35 Найти цитируемый пост)
что-то вроде этого http://www.codeproject.com/KB/wtl/wtlhandle.aspx

Угу, имеет смысл  smile 
PM MAIL   Вверх
mes
Дата 20.4.2011, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



такое можно реализовать только разгрузив через прослойку..
способов несколько, но проще будет завести енум для каждого значения, и специализировать для него шаблон..

Добавлено через 1 минуту и 11 секунд
чтоб много не специализировать, можно завести для этого доп структуру..

Добавлено через 10 минут и 36 секунд
вот набросок : http://liveworkspace.org/code/9387f8ebf23d...656e48dd2cd25bc


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


любитель
****


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

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



Цитата(mes @  20.4.2011,  10:45 Найти цитируемый пост)
вот набросок : 

вместо структуры, можно использовать функцию, чтоб избежать лишнего кода :
http://liveworkspace.org/code/847159fc38fb...40f402219b6f3dd


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


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

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