Может возвращать два массива в структуре, но не в классе C ++ - PullRequest
0 голосов
/ 07 сентября 2018

Я могу вернуть два массива через 'struct' с кодами ниже; но не могу перевести код на "класс". "класс" код и ошибка также прикреплены.

Пожалуйста, пролите свет на это. Я должен использовать «класс» и множественные массивы в моем проекте.

1) со структурой

   struct strA{
   int *p;
   int *p1;
   };

   strA setValue(int n)
   {
     strA strB;
     strB.p=new int[n];
     strB.p1=new int[n];

      for (int i=0; i<n;i++)
      {
            strB.p[i]=i;
            strB.p1[i]=i*2;
      }
      return strB;
   }

   int main(){
      const int N=3;
      strA strC;
      strC=setValue (5);
      for (int i=0; i<N;i++)
      {
            cout<< strC.p[i]<<endl;
            cout<< strC.p1[i]<<endl;
      }
      return 0;
   }
  1. с "классом". оказалось "ошибка C3867: 'strA :: setValue': отсутствует список аргументов при вызове функции; используйте '& strA :: setValue' для создания указателя на член"

    class strA{
    public:
      int *p;
      int *p1;
    public:
      strA();
      ~strA(){delete p, delete p1;}
      strA setValue(int n);
    };
    
    
     strA strA::setValue(int n)
     {
       strA strB;
       strB.p=new int[n];
       strB.p1=new int[n];  
       for(int i=0; i<n;i++)
       {
            strB.p[i]=i;
            strB.p1[i]=i*2;
       }
       return strB;
      }
    
     int main(){
        const int N=3;
        strA strC;
        strC.setValue (N);
        for (int i=0; i<N;i++)
        {
          cout<< strC.setValue<<endl;
          cout<< strC.p1[i]<<endl;
        }
        return 0;
        }
    

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Во-первых, в качестве ответа PW. В этой строке вы встретите ошибку компиляции cout<< strC.setValue<<endl;, потому что вы забыли передать аргумент для функции setValue(int n).

Во-вторых, неуместно писатьsetValue(int n) функция как то, что вы написали.Я рекомендую вам написать эту функцию следующим образом:

void ::setValue(int n)
{
  this->p=new int[n];
  this->p1=new int[n];  
  for (int i=0; i<n;i++)
  {
    this->p[i]=i;
    this->p1[i]=i*2;
  }
}

Я думаю, что вы новичок, и вам следует больше узнать об объектно-ориентированном программировании.

0 голосов
/ 07 сентября 2018

Сначала я исправлю упомянутую вами ошибку. Есть и другие проблемы с этим кодом.

Ошибка из-за этой строки в main:

cout<< strC.setValue<<endl;

setValue - это функция, и ее нужно вызывать с такими аргументами:

strC.setValue(N);

Другие вопросы:

  1. Вы не можете использовать cout для печати объекта, возвращенного с setValue если вы не перегружены оператором << для класса strA.
  2. В функции setValue вы определили объект strB и назначаете память для его членов. Эта память не освобождена. То, что вы освобождаете, это члены объекта strC, определенные в main. Посмотрите на деструктора strA, и вы поймете.

main в первой ("struct") версии кода можно использовать во второй ("class") версии, поскольку p и p1 являются общедоступными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...