Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 726
#1

error C2719 - C++

30.08.2013, 08:37. Просмотров 985. Ответов 15
Метки нет (Все метки)

При попытке передать в функцию тип XMMATRIX появляется следующая ошибка:
"Ошибка 29 error C2719: WorldMatrix: формальный параметр с __declspec(align("16")) не будет выровнен"
C++
1
void SetMatrix(XMMATRIX WorldMatrix, float kx, float ky, XMFLOAT3 pCam, XMFLOAT3 pDrop, int SwitchConstBuffer);
Уважаемые, подскажите пожалуйста что значит эта ошибка и как от неё избавиться, работаю в VS 2012?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2013, 08:37     error C2719
Посмотрите здесь:

build error [xxx.exe] error 1 - C++
Почему после компиляции dev-cpp выдает такую ошибку: D:\*****\Makefile.win Error 1 При компиляции в visual с все в порядке ...

Error C2059: syntax error : 'constant' - C++
Подскажите пожалуйста почему выдает ошибку error C2059: syntax error : 'constant' в этой строке : const int OK=0, EOS=0, ERROR=0; ...

Error E2141 Declaration syntax error - C++
#include<stdlib.h> #include<conio.h> #include<stdio.h> #include<cmath.h> #include<stdlib.h> #include<time.h> ...

Error C2061: syntax error : identifier 'h' - C++
в чем ошибка? error C2061: syntax error : identifier 'h' #include "stdafx.h" #include "stdio.h" #include "conio.h" #include...

Error C2143: syntax error : missing ';' before '.' - C++
#include <fstream> #include <iostream> using std::cin; using std::cout; using std::endl; using std::ifstream; using...

[ILINK32 Error] Error: Unresolved external - C++
помогите вылетает ошибка и программа из-за этого не работает! Error: Unresolved external '__fastcall...

Error C2589 и error C2059 - C++
Не могу никак исправить ошибку в последней сточке #include "stdafx.h" #include <iostream> #include <algorithm> #include <random>...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
30.08.2013, 10:31     error C2719 #2
Только сменой аллокатора, больше никак.

Добавлено через 1 минуту
Но лучше реализовать aligned_starage, который хранит внутри выровненные данные.
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 726
30.08.2013, 10:35  [ТС]     error C2719 #3
а что за аллокатор, и зачем его используют ? а то первый раз про него слышу, и из всего что вы сказали я ничего не понял..
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
30.08.2013, 10:42     error C2719 #4
aligned_storage
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 726
30.08.2013, 17:47  [ТС]     error C2719 #5
а как понять выровненые данные ?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
30.08.2013, 18:12     error C2719 #6
Цитата Сообщение от NEvOl Посмотреть сообщение
При попытке передать в функцию тип XMMATRIX
А как ты передаешь параметры функции и какие параметры?
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 726
30.08.2013, 20:20  [ТС]     error C2719 #7
Примерно так:
C++
1
2
XMMATRIX BaseWorldMatrix = SetWorldMatrix();
SetMatrix(BaseWorldMatrix, ....);
Функция SetWorldMatrix() возвращает тип XMMATRIX, а ругается на SetMatrix()
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
30.08.2013, 20:44     error C2719 #8
Суть в том, что функция не может принять выравненные данные.. А вообще трудно что-то понять по таким кусочкам кода.
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 726
31.08.2013, 09:52  [ТС]     error C2719 #9
Вот более подробный код:
C++
1
2
XMMATRIX BaseWorldMatrix = SetWorldMatrix(XMFLOAT3(0, 0, 0), XMFLOAT3(0, 0, 1), XMFLOAT3(1, 0, 0), XMFLOAT3(0, 1, 0)); 
SetMatrix(BaseWorldMatrix, 4, 1, g_pCam);
Вот код функций:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
void SetMatrix(XMMATRIX WorldMatrix, float kx, float ky, XMFLOAT3 pCam)
{
    g_World = WorldMatrix;
 
 
    g_ViewPos._11 = 1;  g_ViewPos._12 = 0;  g_ViewPos._13 = 0;  g_ViewPos._14 = 0;  
    g_ViewPos._21 = 0;  g_ViewPos._22 = 1;  g_ViewPos._23 = 0;  g_ViewPos._24 = 0;
    g_ViewPos._31 = 0;  g_ViewPos._32 = 0;  g_ViewPos._33 = 1;  g_ViewPos._34 = 0;
    g_ViewPos._41 = -g_pCam.x;  g_ViewPos._42 = -g_pCam.y;  g_ViewPos._43 = -g_pCam.z;  g_ViewPos._44 = 1;
 
    g_ViewRot._11 = g_rCam.x;   g_ViewRot._12 = g_uCam.x;   g_ViewRot._13 = g_tCam.x;   g_ViewRot._14 = 0;  
    g_ViewRot._21 = g_rCam.y;   g_ViewRot._22 = g_uCam.y;   g_ViewRot._23 = g_tCam.y;   g_ViewRot._24 = 0;
    g_ViewRot._31 = g_rCam.z;   g_ViewRot._32 = g_uCam.z;   g_ViewRot._33 = g_tCam.z;   g_ViewRot._34 = 0;
    g_ViewRot._41 = 0;          g_ViewRot._42 = 0;          g_ViewRot._43 = 0;          g_ViewRot._44 = 1;
 
    g_View = g_ViewPos * g_ViewRot;
 
    ConstBuffer cb;
    
    cb.mWorld = XMMatrixTranspose(g_World); 
    cb.mView = XMMatrixTranspose(g_View);
    cb.mProj = XMMatrixTranspose(g_Proj);
    cb.pCam = pCam;
    cb.fKDxTexture = kx;
    cb.fKDyTexture = ky;
    cb.target = g_tCam;
    cb.pos = pCam;
 
    g_pDeviceContext->UpdateSubresource(g_pTerraConstBuffer,0, NULL, &cb, 0, 0);
 
}
 
XMMATRIX SetWorldMatrix(XMFLOAT3 pos, XMFLOAT3 target, XMFLOAT3 right, XMFLOAT3 up)
{
    XMMATRIX WorldRot;
 
    WorldRot._11 = right.x;     WorldRot._12 = right.y;     WorldRot._13 = right.z;     WorldRot._14 = 0;
    WorldRot._21 = up.x;        WorldRot._22 = up.y;        WorldRot._23 = up.z;        WorldRot._24 = 0;
    WorldRot._31 = target.x;    WorldRot._32 = target.y;    WorldRot._33 = target.z;    WorldRot._34 = 0;
    WorldRot._41 = 0;           WorldRot._42 = 0;           WorldRot._43 = 0;           WorldRot._44 = 1;
 
    XMMATRIX WorldPos;
 
    WorldPos._11 = 1;       WorldPos._12 = 0;       WorldPos._13 = 0;       WorldPos._14 = 0;
    WorldPos._21 = 0;       WorldPos._22 = 1;       WorldPos._23 = 0;       WorldPos._24 = 0;
    WorldPos._31 = 0;       WorldPos._32 = 0;       WorldPos._33 = 1;       WorldPos._34 = 0;
    WorldPos._41 = pos.x;       WorldPos._42 = pos.y;       WorldPos._43 = pos.z;       WorldPos._44 = 1;
 
    return WorldRot * WorldPos;
}
ругается на объявлении и определении функции, говорит вот что :"Ошибка 29 error C2719: WorldMatrix: формальный параметр с __declspec(align("16")) не будет выровнен"
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
31.08.2013, 09:57     error C2719 #10
Это потому, что модификатор align __declspec не распространяется на параметры функций.
Попробуй передать матрицу через указатель: XMMATRIX *WorldMatrix с соответствующими изменениями в коде.
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 726
31.08.2013, 11:58  [ТС]     error C2719 #11
Можете обьяснить что это за модификатор и что значит выравнивание данных, пытался нагуглить но так до конца и не понял что это... буду очень признателен
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
31.08.2013, 12:10     error C2719 #12
__declspec(align('16')) - этот модификатор (расширение Microsoft, в других компиляторах - другие модификаторы) говорит компилятору, что данные должны быть выравнены по границе 16 байт, т.е. адрес переменной будет кратным 16 (маска 0xfffffff0), это сделано потому, что операции с такими матрицами выполняются набором инструкций SSE, размер регистров которых равен 128 битам (16 байт). Не выровненные данные будут обрабатываться дольше, нежели выравненные.
Если интересно почитай про выравнивание данных.
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 726
31.08.2013, 19:32  [ТС]     error C2719 #13
После изменения ошибка пропала, но возникла другая проблема, в ходе работы программы данные в матрице меняются, вот как изменил, может что-то неправиль сделал:
C++
1
2
XMMATRIX *BaseWorldMatrix = SetWorldMatrix(XMFLOAT3(0, 0, 0), XMFLOAT3(0, 0, 1), XMFLOAT3(1, 0, 0), XMFLOAT3(0, 1, 0)); 
SetMatrix(BaseWorldMatrix, 4, 1, g_pCam);
а вот код функций:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
XMMATRIX* SetWorldMatrix(XMFLOAT3 pos, XMFLOAT3 target, XMFLOAT3 right, XMFLOAT3 up)
{
    XMMATRIX WorldRot;
 
    WorldRot._11 = right.x;     WorldRot._12 = right.y;     WorldRot._13 = right.z;     WorldRot._14 = 0;
    WorldRot._21 = up.x;        WorldRot._22 = up.y;        WorldRot._23 = up.z;        WorldRot._24 = 0;
    WorldRot._31 = target.x;    WorldRot._32 = target.y;    WorldRot._33 = target.z;    WorldRot._34 = 0;
    WorldRot._41 = 0;           WorldRot._42 = 0;           WorldRot._43 = 0;           WorldRot._44 = 1;
 
 
    XMMATRIX WorldPos;
 
    WorldPos._11 = 1;       WorldPos._12 = 0;       WorldPos._13 = 0;       WorldPos._14 = 0;
    WorldPos._21 = 0;       WorldPos._22 = 1;       WorldPos._23 = 0;       WorldPos._24 = 0;
    WorldPos._31 = 0;       WorldPos._32 = 0;       WorldPos._33 = 1;       WorldPos._34 = 0;
    WorldPos._41 = pos.x;   WorldPos._42 = pos.y;   WorldPos._43 = pos.z;   WorldPos._44 = 1;
 
    return &WorldPos;
}
void SetMatrix(XMMATRIX *WorldMatrix, float kx, float ky, XMFLOAT3 pCam)
{
    g_World = *WorldMatrix;
 
 
    g_ViewPos._11 = 1;  g_ViewPos._12 = 0;  g_ViewPos._13 = 0;  g_ViewPos._14 = 0;  
    g_ViewPos._21 = 0;  g_ViewPos._22 = 1;  g_ViewPos._23 = 0;  g_ViewPos._24 = 0;
    g_ViewPos._31 = 0;  g_ViewPos._32 = 0;  g_ViewPos._33 = 1;  g_ViewPos._34 = 0;
    g_ViewPos._41 = -g_pCam.x;  g_ViewPos._42 = -g_pCam.y;  g_ViewPos._43 = -g_pCam.z;  g_ViewPos._44 = 1;
 
    g_ViewRot._11 = g_rCam.x;   g_ViewRot._12 = g_uCam.x;   g_ViewRot._13 = g_tCam.x;   g_ViewRot._14 = 0;  
    g_ViewRot._21 = g_rCam.y;   g_ViewRot._22 = g_uCam.y;   g_ViewRot._23 = g_tCam.y;   g_ViewRot._24 = 0;
    g_ViewRot._31 = g_rCam.z;   g_ViewRot._32 = g_uCam.z;   g_ViewRot._33 = g_tCam.z;   g_ViewRot._34 = 0;
    g_ViewRot._41 = 0;          g_ViewRot._42 = 0;          g_ViewRot._43 = 0;          g_ViewRot._44 = 1;
 
    g_View = g_ViewPos * g_ViewRot;
 
    ConstBuffer cb;
        
    cb.mWorld = XMMatrixTranspose(g_World); 
    cb.mView = XMMatrixTranspose(g_View);
    cb.mProj = XMMatrixTranspose(g_Proj);
    cb.pCam = pCam;
    cb.fKDxTexture = kx;
    cb.fKDyTexture = ky;
    cb.target = g_tCam;
    cb.pos = g_pCam;
 
    g_pDeviceContext->UpdateSubresource(g_pTerraConstBuffer,0, NULL, &cb, 0, 0);
}
т.е. функция SetWorldMatrix возвращает правильную матрицу, но в функции SetMatrix у переменной WorldMatrix данные отсутствуют..
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
31.08.2013, 19:36     error C2719 #14
Не правильно делаешь. Делай так:
C++
1
2
XMMATRIX BaseWorldMatrix = SetWorldMatrix(XMFLOAT3(0, 0, 0), XMFLOAT3(0, 0, 1), XMFLOAT3(1, 0, 0), XMFLOAT3(0, 1, 0)); 
SetMatrix( &BaseWorldMatrix, 4, 1, g_pCam);
И в функции SetMatrix просто разименовывай указатель. Если не получится - спрашивай.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2013, 19:42     error C2719
Еще ссылки по теме:

[Error] 'error' was not declared in this scope - C++
Вот кусок кода void Token_stream::putback(Token t) { if (full) error("putback() into a full buffer"); buffer = t; //...

Error X3003: redefinition error - C++
Здравствуйте! Доброго времени суток всем! Помогите пожалуйста решить проблему. Работаю в Visual Studio 2015 Community. Проект собирается...

Error C2059: syntax error : ']' - C++
Добрый день. Помогите пожалуйста разобраться с проблемой. Пишу программу, решающую систему линейных уравнений методом Крамера. Затруднение...

error C4430, error C2143 - C++
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию error C2143:...

Error C2062 и error C2065 - C++
Добрый день, написал программу, но она показывает ошибку. П.С. Я полный чайник=),прошу помощь у знающих. Вот код: #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 726
31.08.2013, 19:42  [ТС]     error C2719 #15
как вы написали сработало) скажите пожалуйста, в чем у меня была ошибка, а то я не очень в чем особо разница ?
Yandex
Объявления
31.08.2013, 19:42     error C2719
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru