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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Порт на msvc, с gcc на msvc 
V
    Опции темы
C4Grey
  Дата 28.3.2008, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Салют, Homo Programaticus!
Сразу перехожу к проблеме:

Код

#ifndef VEC3_H_INCLUDED 
#define VEC3_H_INCLUDED 

#include <xmmintrin.h> 
#include "platform.h" 

namespace ogldemo { 

#ifdef __GNUC__ 

    typedef __m128 float4_t; 

    class vec3_t { 

        float4_t xmm; 

    public: 

        ALWAYS_INLINE vec3_t() {} 

        ALWAYS_INLINE vec3_t(float4_t v) : xmm(v) {} 

        ALWAYS_INLINE vec3_t(float x, float y, float z, float w) : xmm((float4_t){x,y,z,w}) {} 

        // 
        // 
        // 

        ALWAYS_INLINE vec3_t operator+ (const vec3_t& b) { 
            return xmm + b.xmm; 
        } 

        ALWAYS_INLINE vec3_t operator* (const vec3_t& b) { 
            return xmm * b.xmm; 
        } 

        // 
        // 
        // 

        ALWAYS_INLINE float x() const { 
            return Component(1); 
        } 

        ALWAYS_INLINE float y() const { 
            return Component(2); 
        } 

        ALWAYS_INLINE float z() const { 
            return Component(3); 
        } 

        ALWAYS_INLINE float w() const { 
            return Component(4); 
        } 

        // 
        // 
        // 

        ALWAYS_INLINE float& x() { 
            return Component(1); 
        } 

        ALWAYS_INLINE float& y() { 
            return Component(2); 
        } 

        ALWAYS_INLINE float& z() { 
            return Component(3); 
        } 

        ALWAYS_INLINE float& w() { 
            return Component(4); 
        } 

    protected: 

        ALWAYS_INLINE float Component(int idx) const { 
            return *((float*)(&xmm) + (idx - 1)); 
        } 

        ALWAYS_INLINE float& Component(int idx) { 
            return *((float*)(&xmm) + (idx - 1)); 
        } 
    }; 

#elif __MSVC__ 

#endif 
} 

#endif // VEC3_H_INCLUDED 


Вот такой код есть...Возникла необходимость просто портировать его на msvc, итог:

Код

#ifndef VEC3_H_INCLUDED 
#define VEC3_H_INCLUDED 

#include <xmmintrin.h> 
//#include "platform.h" 

namespace ogldemo { 

//#ifdef __GNUC__ 

    typedef __m128 float4_t; 

    class vec3_t { 

       float4_t xmm; 

    public: vec3_t() {};
               vec3_t(float4_t v) : xmm(v) {};
               vec3_t(float x, float y, float z, float w) : xmm((float4_t){x,y,z,w}) {};
        // 
        // 
        // 

        vec3_t operator+ (const vec3_t& b) { 
            return xmm + b.xmm; 
        } 

        vec3_t operator* (const vec3_t& b) { 
            return xmm * b.xmm; 
        } 

        // 
        // 
        // 

       float x() const { 
            return Component(1); 
        } 

        float y() const { 
            return Component(2); 
        } 

        float z() const { 
            return Component(3); 
        } 

        float w() const { 
            return Component(4); 
        } 

        // 
        // 
        // 

        float& x() { 
            return Component(1); 
        } 

        float& y() { 
            return Component(2); 
        } 

        float& z() { 
            return Component(3); 
        } 

        float& w() { 
            return Component(4); 
        } 

    protected: 

        float Component(int idx) const { 
            return *((float*)(&xmm) + (idx - 1)); 
        } 

        float& Component(int idx) { 
            return *((float*)(&xmm) + (idx - 1)); 
        } 
    }; 
//#elif __MSVC__ 

//#endif 
} 

#endif // VEC3_H_INCLUDED 


В строчке 
vec3_t(float x, float y, float z, float w) : xmm((float4_t){x,y,z,w}) {};
Вдает кучу ошибок:

Error    1    error C2958: the left parenthesis '(' found at 'd:\kvaz studio\visual studio 2008\projects\vect_3\vect_3\vect_c.cpp(19)' was not matched correctly
Error    2    error C2059: syntax error : ')'    
Error    3    error C2059: syntax error : '{'    
Error    4    error C2334: unexpected token(s) preceding '{'; skipping apparent function body
Error    5    error C2143: syntax error : missing ')' before '{'
Error    6    error C2059: syntax error : ')'    
Error    7    error C2143: syntax error : missing ';' before '}'

и в
Код

vec3_t operator+ (const vec3_t& b) { 
            return xmm + b.xmm; 
        } 


конкретно
return xmm + b.xmm; 
Ошибка:
Error    8    error C2676: binary '+' : 'ogldemo::float4_t' does not define this operator or a conversion to a type acceptable to the predefined operator    
то же самое и для второго оператора...
Использую Microsoft Visual Studio 2008.
Поправте, пожалуйста... smile 

Это сообщение отредактировал(а) C4Grey - 28.3.2008, 00:38
PM MAIL   Вверх
korian
Дата 28.3.2008, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



((float4_t){x,y,z,w}) - интересная конструкция... она легальна в C++?

vec3_t(float x, float y, float z, float w) : xmm((float4_t){x,y,z,w}) {};
vec3_t(float x, float y, float z, float w) { Component(1) = x; Component(2) = y; Component(3) = z; Component(4) = w; }

а по второму хз, ну нету оператора + для типа float4_t...


Это сообщение отредактировал(а) korian - 28.3.2008, 07:20
PM   Вверх
C4Grey
Дата 28.3.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



korian, спасибо. А по поводу оператора, ладно, буду использовать тогда
return _mm_add_ps, return _mm_mul_ps.

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


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

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