Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/103: Рейтинг темы: голосов - 103, средняя оценка - 4.73
3 / 3 / 0
Регистрация: 02.01.2015
Сообщений: 39
1

В чем здесь ошибка?

05.01.2015, 11:09. Показов 20560. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Взял пример из книги 3d game programming with DirectX11, немного переделал, т.к. #include <xnamath.h> больше не существует:

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
#include <Windows.h>
#include <DirectXMath.h>
#include <iostream>
 
using namespace std;
using namespace DirectX;
 
ostream& operator<<(ostream& os, FXMVECTOR v)
{
    XMFLOAT4 dest;
    XMStoreFloat4(&dest, v);
    {
        os << "(" << dest.x << ", " << dest.y << ", "
            << dest.z << ", " << dest.w << ")";
    }
    return os;
}
 
ostream& operator<<(ostream& os, CXMMATRIX m)
{
    for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            os << m(i, j) << "\t"; // ошибка
        }
        os << endl;
    }
    return os;
}
 
int main()
{
 
    XMMATRIX A(
        1.0f, 0.0f, 0.0f, 0.0f,
        0.0f, 2.0f, 0.0f, 0.0f,
        0.0f, 0.0f, 4.0f, 0.0f,
        1.0f, 2.0f, 3.0f, 1.0f);
 
    XMVECTOR det = XMMatrixDeterminant(A);
 
    cout << "det = determinant(A) = " << det << endl;
 
    system("PAUSE");
    return 0;
}
Компилятор пишет 2 ошибки:

error C2064: результатом вычисления фрагмента не является функция, принимающая 2 аргументов.

IntelliSense: вызов объекта типа класса без соответствующей функции operator() или функций преобразования указателя в функцию.

Что делать, как исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2015, 11:09
Ответы с готовыми решениями:

В чём здесь ошибка?
Вот код программы// // Conversion - Прогграмма для преобразования // температтуры по Цельсию в...

В чём здесь ошибка?
В чём здесь ошибка? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string.h&gt; using...

В чём здесь ошибка?
#include &lt;vcl.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std;...

Подскажите, в чем здесь ошибка? И как ее исправить...плиз!
//Ошибка здесь!!!! void power (ulong m, ulong &amp;s, ulong &amp;t) { for (t=0, s=m; s%2==0; t++) ...

6
Модератор
Эксперт С++
13674 / 10885 / 6463
Регистрация: 18.12.2011
Сообщений: 29,044
05.01.2015, 12:47 2
Указали бы номера строк....
Мое предположение
m(i,j) понимается как функция.
Может надо было писать m[i,j]?
0
3 / 3 / 0
Регистрация: 02.01.2015
Сообщений: 39
05.01.2015, 13:46  [ТС] 3
Нет, не помогло.
0
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
05.01.2015, 14:09 4
T_P_A_K_T_O_P, напиши в начале своей программы
C++
1
#define _XM_NO_INTRINSICS_
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.01.2015, 14:10 5
Цитата Сообщение от zss Посмотреть сообщение
Может надо было писать m[i,j]?
Это же не паскаль.
m[i][j] вестимо
0
Модератор
Эксперт С++
13674 / 10885 / 6463
Регистрация: 18.12.2011
Сообщений: 29,044
05.01.2015, 14:36 6
Цитата Сообщение от Tulosba Посмотреть сообщение
m[i][j] вестимо
Не факт, зависит от того, как определен operator[]
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.01.2015, 15:02 7
Цитата Сообщение от zss Посмотреть сообщение
Не факт, зависит от того, как определен operator[]
Он может принимать исключительно 1 аргумент. Запись [i,j] при вызове будет интерпретирована как [j]. Вспоминаем, что такое оператор запятая.
Поэтому в квадратных скобках только один аргумент, и для многомерного случая нужно использовать как раз вариант [i][j]...

Добавлено через 15 минут
Кстати, в Стандарте (13.5.5 Subscripting [over.sub]) как раз приводится интересный пример, как передать несколько "аргументов" в operator[], обернув их в std::initializer_list.
Приведу несколько адаптированный вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <initializer_list>
 
struct S
{
    void operator []( std::initializer_list<int> lst ) { 
        for( int i : lst ) {
            std::cout << i << std::endl;
        }
    }
};
 
int main() {
    
    S s;
    s[{1,2,3,4}];
    
    return 0;
}
http://ideone.com/OZbpEc
3
05.01.2015, 15:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2015, 15:02
Помогаю со студенческими работами здесь

Я чайник , кто подскажет,в чем здесь фишка?
У меня ,какой знак сравнения ни ставишь ,все равно выводит &quot;true&quot; .Значит программа построена...

Объясните пожалуйста, в чем здесь дело(структура и указатель)
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;windows.h&gt; using namespace std; struct pizza...

Почему цикл while выполняет здесь больше итераций чем нужно?
Не понимаю от чего здесь цикл выполняется 21 раз вместо 10. Притом если вместо i &lt; 10 написать i &lt;=...

В чем здесь ошибка?
class Nastya { public static void main(String args) throws java.io.IOException { char...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru