На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> ошибка компиляции
    Здраствуйте!

    Скорее я туплю, чем не туплю :D
    ExpandedWrap disabled
      const int SIZE = 4;
       
      class Square;
       
      typedef Square SquareArray[SIZE];
      typedef SquareArray SquareArrayArray[SIZE];
       
      class Square
      {
      public:
          Square() : mX(0), mY(0) {}
          Square(int x, int y) : mX(x), mY(y) {}
          ~Square(){}
      private:
          int mX, mY;
      };
       
       
      SquareArray squareArray =
      {
          Square(0, 0),
          Square(0, 1),
          Square(1, 1),
          Square(1, 0)
      };
       
       
      SquareArrayArray squareArrayArray =
      {
          &squareArray, //<-- здесь ошибка
          &squareArray,
          &squareArray,
          &squareArray
      };


    компилятор пишет ошибку:

    error C2440: 'initializing' : cannot convert from 'SquareArray (*)' to 'Square'

    что делать?
      Цитата Cfon @
      что делать?

      Внимательно посмотреть на ту строчку, на которую указал компилятор.

      А присваивать объекту, указатель на этот объект нельзя, пока не перегрузишь соответствующий оператор.

      А я же, не очень понял, что именно ты хотел сделать, читал по диаганали.
        Цитата Cfon @
        error C2440: 'initializing' : cannot convert from 'SquareArray (*)' to 'Square'

        что делать?

        Передавать не указатель, а значение, вот так надо объявлять:
        ExpandedWrap disabled
          SquareArrayArray squareArrayArray =
          {
              *(squareArray + 0), //<-- здесь ошибка
              *(squareArray + 1),
              *(squareArray + 2),
              *(squareArray + 3)
          };

        Ну или вот так:
        ExpandedWrap disabled
          SquareArrayArray squareArrayArray =
          {
              squareArray[0], //<-- здесь ошибка
              squareArray[1],
              squareArray[2],
              squareArray[3]
          };


        Добавлено
        А еще лучше, объявить двумерный массив и не усложнять себе жизнь, и остальным за одно.

        Добавлено
        Да, и еще у тебя скрытая ошибка компиляции в коде. Чуть позже до нее дойдешь, особенно исходя из того, как ты любишь MFC. Конкретно в имени твоей константы.

        Добавлено
        https://msdn.microsoft.com/en-us/library/wi...6(v=vs.85).aspx
        Сообщение отредактировано: KILLER -
          Пардон я допустил опечатку :D

          ExpandedWrap disabled
            typedef Square SquareArray[SIZE];
            typedef SquareArray* SquareArrayArray[SIZE];


          первый это массив объектов Square, а второй массив указателей на массив объектов Square.

          Добавлено
          Цитата KILLER @
          Да, и еще у тебя скрытая ошибка компиляции в коде. Чуть позже до нее дойдешь, особенно исходя из того, как ты любишь MFC. Конкретно в имени твоей константы.

          Добавлено
          https://msdn.microsoft.com/en-us/library/wi...6(v=vs.85).aspx

          спс ясно буду помнить, переименую на SQUARE_ARRAY_SIZE :)
          Сообщение отредактировано: Cfon -
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0262 ]   [ 16 queries used ]   [ Generated: 18.04.24, 02:45 GMT ]