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

warning: ISO C++ says that these are ambiguous - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Создание динамического массива http://www.cyberforum.ru/cpp-beginners/thread680703.html
Как объявить вот так вот : int blocks = { {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}}; Мне пишет ошибку : массив не может содержать элементы этого типа
C++ Палиндром нужно чтобы в текстовом файле ab.txt находило палиндромы и выводило их на экран.#include<iostream> #include<stdio.h> #define N 2; using namespace std; void main() { FILE *File; File=fopen("D:/ab.txt", "r"); http://www.cyberforum.ru/cpp-beginners/thread680695.html
Класс правильный треугольник C++
ребята помогите создать класс- правильный треугольник
фиктивный и ведущий узел C++
может быть совсем глупый вопрос задаю. но все таки, я никак не понимаю что такой ФИКТИВНЫЙ УЗЕЛ, ВЕДУЩИЙ УЗЕЛ и ФИКТИВНЫЙ ВЕДУЩИЙ И ЗАВЕРШАЮЩИЙ УЗЛЫ в связном списке ? пожалуйста желательно на примере объясните...
C++ Метод простых итераций для СЛАУ http://www.cyberforum.ru/cpp-beginners/thread680662.html
Доброго времени суток всем!!! решаю СЛАУ методом простых итераций, проблема вот в чем: не могу понять, как сделать расчет по к-ым приближениям? double Am={21,4,2,2,4, 8, 0, 2, 2, 0, 9, -4, 2, 2, -4, 12}; double bb; double Bm={2*s*(ss), 5*((ss)-cs), 7*(cs+ss), 3*(ss)}, eee = 0.0001, xpred, xx, err; r = 0; for( i = 0; i <n ; i++){ bb = Bm/Am; for(j = 0; j < n; j++){
C++ Конструктор Помогите написать конструкторы для класса матрицы для инициализации квадратной матрицы заданного размера с заданными компонентами; для инициализации прямоугольной матрицы заданных размеров с заданными компонентами; По идее надо использовать макросы va_start, va_list и va_end. Только я не очень понимаю. как это сделать. Элементы в матрице типа double подробнее

Показать сообщение отдельно
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
25.10.2012, 22:51     warning: ISO C++ says that these are ambiguous
Вечер добрый.
Помогите раскрыть причину неоднозначности:
Действие:
C++
1
2
3
4
5
6
7
8
9
10
Matrix1 &Matrix1::mult(const Matrix1 &other)
{
    Matrix1 m;
    m.setRow1(mult(other.column1()));
    m.setRow2(mult(other.column2()));
    m.setRow3(mult(other.column3()));
    m.setRow4(mult(other.column4()));
    this->operator = (m);
    return *this;
}
Смысловые члены:
Для класса Matrix1
Прототипы для ф-ии mult и похожей на нее -> неоднозначность возникать не должна...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   /**
      * Ф-ия умножения текущей матрицы на другую матрицу
      *     Текущая матрица находится слева
      * @param other Адрес матрицы для умножения
      * @return Адрес текущей матрицы
      */
    Matrix1 &mult(const Matrix1 &other);
 
   /**
      * Ф-ия умножения матрицы на вектор
      *     Вектор находится справа
      * @param v Адрес вектора для умножения
      * @return Полученный вектор
      */
    Vec1 mult(const Vec1 &v) const;
C++
1
2
inline void setRow1(const Vec1 &val)
    { c->setX(val.x()); (c + 1)->setX(val.y()); (c + 2)->setX(val.z()); (c + 3)->setX(val.d()); }
C++
1
Vec1 *c;    /**< Указатель на первую колонку матрицы */
C++
1
2
3
4
PROPERTY(Vec1, column1, Column1, *c)
PROPERTY(Vec1, column2, Column2, *(c + 1))
PROPERTY(Vec1, column3, Column3, *(c + 2))
PROPERTY(Vec1, column4, Column4, *(c + 3))
Для класса Vec1
C++
1
2
3
4
PROPERTY(dim, x, X, *v)
PROPERTY(dim, y, Y, *(v + 1))
PROPERTY(dim, z, Z, *(v + 2))
PROPERTY(dim, d, D, *(v + 3))
C++
1
dim *v; /**< Указатель на первую строку столбца координат */
Где
C++
1
2
3
4
5
6
7
8
9
10
11
12
/**
  * @def PROPERTY(Type, Name, UpperCaseName, Val)
  * @brief Макрос позволяет определить для класса свойство
  * @param Type Тип возвращаемого и примнимаемого значения
  * @param Name Имя свойства
  * @param UpperCaseName Имя свойства с первой буквой в верхнем регистре
  * @param Val Имя переменной для возврата значения
  */
#define PROPERTY(Type, Name, UpperCaseName, Val)\
    inline Type Name() const { return Val; }\
    inline void set##UpperCaseName(const Type &val){ Val = val; }
typedef float dim;
Очень раздражают эти четыре варнинга. Причины не вижу. С указателями вроде правильно работаю. А дальше типизация вся выстраивается однозначно...
Но, видать, компилятор так не считает.
GCC 4.7.1

Добавлено через 20 минут
Так, причина найдена:
Ф-ия column1() возвращает вместо указателя на объект типа Vec1 сам объект. Соответственно при попытке взять адрес этого объекта может возникнуть ошибка тк он уже может быть к тому времени уничтожен.

Тогда теперь вопрос сводится к тому, как мне корректно преобразовать возвращаемый ф-иями Vec1 к (const Vec1 &) без лишних копирований и гарантией того, что объект действительно существует.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru