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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перенсти код из g++ в msvc10 
:(
    Опции темы
trupca
Дата 13.8.2013, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



есть примерно такой код. его отлично хавает гцц, но не переваривает msvc10. чяднт? ругается на строку: struct foo<T>::bar foo<T>::operator[](int x). спрашивается а как ещё о можно разрешить доступ к struct bar из области видимости foo<t>? 

Код

#include <iostream> 
 
using namespace std; 
 
template <typename T> 
class foo { 
public: 
    struct bar { 
        T br;     
    }; 
 
    struct bar operator[](int); 
private: 
    T * bor; 
}; 
 
template <typename T> 
struct foo<T>::bar foo<T>::operator[](int x) { 
    struct Bar brrr; 
 
    return brrr; 

 
int main() { 
     
 
    return 0; 


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


Шустрый
*


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

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



Как-то так:
Код

template <typename T> 
class foo 

public: 
    struct bar 
    { 
        T br;     
    }; 

    struct bar operator[](int); 
private: 
    T * bor; 
}; 

template <typename T> 
typename foo<T>::bar foo<T>::operator[](int x)

    struct bar brrr;
    
    return brrr; 


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


Новичок



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

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



спасибо это помогло. если не затруднит вы не могли объяснить смысл данной синтаксической конструкции? почему нужно писать именно так?
PM MAIL   Вверх
NoviceF
Дата 13.8.2013, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(trupca @  13.8.2013,  12:57 Найти цитируемый пост)
почему нужно писать именно так? 


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

Вообще, насколько я понимаю, возможность употребления слова struct при объявлении переменных (и типов возвращаемых значений) сохраняется только для совместимости с Си, и в плюсах им никто не пользуется.

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

Код

typename foo<T>::bar


является правильной и корретной, т.к. без слова typename компилятор не должен понимать, что такое bar, ведь вполне может быть, что у какого-то типа определена константа с таким именем. typename как раз и призван указать компилятору, что речь идёт о типе.

Кстати, gcc допускает и использование слова class:

Код

#include <iostream>

using namespace std;

template <typename T>
class foo {
public:
    struct bar {
        T br;
    };

    bar operator[](int);
private:
    T * bor;
};

template <typename T>
class foo<T>::bar foo<T>::operator[](int x) {
    struct bar brrr;

    return brrr;
}

template class foo<int>;

int main()
{

    return 0;
}


выглядит это странно и похоже на какую-то вольность со стороны gcc.
PM MAIL   Вверх
trupca
Дата 13.8.2013, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



понятно. спасибо большое. ну а что до gcc то за его вольности я его и люблю ))
PM MAIL   Вверх
NoviceF
Дата 13.8.2013, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(trupca @  13.8.2013,  17:19 Найти цитируемый пост)
понятно. спасибо большое.


подожди ещё.. сейчас может кто из авторитетных товарищей отпишется, тогда, возможно, всё прояснится smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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